D04-04

WebGL2变换流水线显微镜

帧序号: 0
旋转角 θ: 0.0°
Vertex Buffer Updated? NO (0 B)
uModelMatrix Updated? YES (64 B)
数据流向显微镜:
1. JavaScript State
→
2. CPU Model Matrix
→
3. gl.uniformMatrix4fv
→
4. GPU Uniform (uModelMatrix)
→
5. Vertex Shader (P' = M·P)
→
6. gl_Position
三维几何视图 (WebGL2 渲染) 标准几何体模式
GPU 顶点显存状态 (VBO) 状态:完全静止 (Static)
模型包含 24 个顶点,12 个三角面。几何数据一次性上传后,每帧旋转无需重写 Buffer!
当前观察顶点 (Inspected Vertex v₀)
原始 VBO 坐标:aPosition = [1.00, 1.00, 1.00, 1.0]
CPU / 应用端状态控制与矩阵解算
绕 Y 轴旋转 (θ): 35°
绕 X 轴旋转: 20°
平移 (tx, ty): 0.0
缩放 (Scale): 1.0×
CPU 实时计算的模型矩阵 (uModelMatrix) 4×4 列优先 (Float32Array)
CPU → GPU 数据传输通道 (API 调用)
// 每帧只向 GPU 传输 16 个 float (64 字节)
gl.uniformMatrix4fv(uModelLoc, false, modelMatrix);
GPU 顶点着色器显微镜 (Per-Vertex) GLSL ES 3.00
#version 300 es
in vec4 aPosition; // 从 VBO 读入 (保持不变)
uniform mat4 uModelMatrix; // CPU 传入 (每帧更新)

void main() {
  gl_Position = uModelMatrix * aPosition;
}
🔍 顶点 v₀ 单顶点代数计算输出:
P' = M · P
gl_Position = [0.82, 1.15, 0.76, 1.00]
架构策略对比 (三种实现方案):
方案 B (行业标准推荐):CPU 仅计算一次 4×4 矩阵并上传 64 字节,由 GPU 对成千上万顶点做高度并行变换。总传输量极低,性能最优。
课堂教学预设: