📚前端面试题速记
Q1

WebGL 基础:顶点着色器 & 片元着色器是什么?干什么用?

速记答案(30 秒)

顶点着色器逐顶点执行,把坐标变换到屏幕空间;片元着色器逐像素执行,决定最终颜色。渲染管线:CPU准备数据 → 顶点着色器变换 → 光栅化 → 片元着色器上色 → 帧缓冲。

📖 详细讲解

标准面试回答(推荐记住)

顶点着色器(Vertex Shader)是逐顶点执行的程序,负责把模型空间或世界空间坐标变换到裁剪空间/屏幕空间,同时可以传递法线、UV等属性。片元着色器(Fragment Shader)是逐像素执行的程序,决定每个像素的最终颜色,可以做光照、纹理采样、阴影、后处理等效果。整个WebGL渲染管线就是:CPU准备缓冲区和纹理,顶点着色器变换几何,光栅化,片元着色器上色,最后写入帧缓冲。

渲染管线流程

  1. 应用阶段(CPU):准备顶点数据、索引、纹理等
  2. 顶点处理(Vertex Shader):坐标变换、法线变换
  3. 图元装配:将顶点组装成三角形
  4. 光栅化:将三角形转换为像素片元
  5. 片元处理(Fragment Shader):计算每个像素颜色
  6. 输出合并:深度测试、混合、写入帧缓冲

面试要点

  • 顶点着色器处理几何变换,片元着色器处理颜色计算
  • 理解GPU并行处理的特点
  • 知道Uniform、Attribute、Varying的区别

💻 代码示例

GLSL 着色器示例
// 顶点着色器
attribute vec3 aPosition;
uniform mat4 uModelViewProjection;

void main() {
  gl_Position = uModelViewProjection * vec4(aPosition, 1.0);
}

// 片元着色器
precision mediump float;
uniform vec3 uColor;

void main() {
  gl_FragColor = vec4(uColor, 1.0);
}
🎮 Three.jsThree.js 自定义着色器演示(可运行)
🎨 效果预览WebGL