非常好的方向 👍!
WebGL 的学习难点不在“API”,而在于图形学底层逻辑 + 数学基础
下面我帮你整理一份完整的学习笔记式总结,涵盖:

🌐 WebGL 核心概念
🧮 向量与矩阵的前置数学知识
🧠 如何把数学与 WebGL 的实际渲染流程对应起来


🕹️ 一、WebGL 基本概念概览

1️⃣ 什么是 WebGL?

WebGL(Web Graphics Library) 是一种基于 OpenGL ES 2.0 的 JavaScript API,
它让你可以在浏览器中直接调用 GPU(显卡)来绘制 2D/3D 图形。

✅ 运行环境:浏览器
✅ 编程语言:JavaScript + GLSL(着色器语言)
✅ 渲染模式:基于 GPU 的管线式渲染模型(Rendering Pipeline)


2️⃣ WebGL 的渲染流程(管线 Pipeline)

WebGL 主要由以下几个阶段组成:

[CPU]
  ↓
1️⃣ 顶点着色器(Vertex Shader)      ← 处理顶点坐标、矩阵变换
  ↓
2️⃣ 图元装配(Primitive Assembly)   ← 线、三角形的构成
  ↓
3️⃣ 光栅化(Rasterization)          ← 转换为像素片段
  ↓
4️⃣ 片元着色器(Fragment Shader)    ← 处理像素颜色、光照、纹理
  ↓
5️⃣ 帧缓冲(Frame Buffer)           ← 输出到屏幕

关键点:

  • 顶点着色器:控制“形状与位置”
  • 片元着色器:控制“颜色与材质”
  • CPU 负责准备数据,GPU 负责高速计算

3️⃣ WebGL 的主要组成部分

模块功能
Canvas绘制图形的 HTML 元素容器
gl contextWebGL 上下文(通过 canvas.getContext("webgl") 获取)
ShaderGPU 程序,GLSL 语言编写
Buffer顶点、法线、纹理坐标等数据存储区
Texture贴图,用于赋予物体表面细节
Matrix用于平移、旋转、缩放、投影变换

🧮 二、前置数学基础

WebGL 的数学基础主要包括:

  • 向量(Vector)
  • 矩阵(Matrix)
  • 齐次坐标与变换(Homogeneous Coordinates)
  • 投影与视图变换(Projection & View)

1️⃣ 向量(Vector)

向量是描述空间方向与长度的基本元素。

🧭 常见向量运算:

运算公式意义
向量加法a + b = (ax+bx, ay+by, az+bz)平移、叠加方向
标量乘法k·a = (k·ax, k·ay, k·az)缩放向量长度
点积(Dot Product)a·b = ax·bx + ay·by + az·bz计算夹角、光照强度
叉积(Cross Product)a×b = (aybz−azby, azbx−axbz, axby−aybx)求法线方向(垂直向量)
单位化(Normalize)**â = a /a

💡 点积用途:

float light = max(dot(normal, lightDir), 0.0);

用于计算光照亮度。


2️⃣ 矩阵(Matrix)

矩阵是 WebGL 中进行坐标变换的核心工具。

常见的 4×4 矩阵类型(齐次坐标系):

类型示例作用
平移矩阵translate(x, y, z)移动物体位置
旋转矩阵rotate(angle, axis)绕轴旋转物体
缩放矩阵scale(sx, sy, sz)改变物体大小
视图矩阵lookAt(eye, target, up)模拟相机视角
投影矩阵perspective(fov, aspect, near, far)模拟透视投影

🔢 4×4 矩阵的作用方式

顶点坐标(以齐次形式表示):

v = [x, y, z, 1]

经过模型、视图、投影矩阵变换:

v' = Projection * View * Model * v

即:

世界坐标系 → 摄像机坐标系 → 屏幕坐标系


3️⃣ 齐次坐标(Homogeneous Coordinates)

WebGL 中默认使用 4D 向量 [x, y, z, w]

  • w = 1:表示位置(可平移)
  • w = 0:表示方向(不受平移影响)

这样可以用统一的矩阵乘法来同时实现旋转、缩放和平移。


4️⃣ 投影变换(Projection)

将 3D 世界映射到 2D 屏幕:

投影类型特点应用
正交投影(Orthographic)不考虑透视,平行线不收敛工程图、CAD
透视投影(Perspective)远小近大,逼真效果游戏、3D 场景

透视投影矩阵示例:

mat4.perspective(out, fovy, aspect, near, far);


🧠 三、WebGL 与数学的对应关系

图形学概念WebGL 实现数学基础
顶点位置顶点缓冲区(VBO)向量
模型变换u_ModelMatrix平移、旋转、缩放矩阵
视图变换u_ViewMatrixlookAt矩阵
投影变换u_ProjectionMatrix透视矩阵
光照计算dot(normal, lightDir)向量点积
法线方向cross()向量叉积

⚙️ 四、代码示例:顶点变换流程

// 顶点着色器(vertex shader)
attribute vec4 a_Position;
uniform mat4 u_ModelMatrix;
uniform mat4 u_ViewMatrix;
uniform mat4 u_ProjectionMatrix;

void main() {
  gl_Position = u_ProjectionMatrix * u_ViewMatrix * u_ModelMatrix * a_Position;
}


🔗 五、参考资料与出站链接