ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

00-WebGL 完整学习路线大纲

00-WebGL 完整学习路线大纲

WebGL 完整学习路线大纲

第一阶段:前置基础(必须先掌握)

1. JavaScript 核心

  • ES6+ 语法(箭头函数、解构、模块化)
  • 类型数组(TypedArray:Float32Array、Uint16Array 等)
  • 异步编程(Promise、async/await)
  • 事件处理机制

2. 计算机图形学数学基础

  • 向量数学:加减乘除、点积、叉积、归一化
  • 矩阵运算:平移、旋转、缩放矩阵、矩阵乘法
  • 坐标空间:模型空间 → 世界空间 → 视图空间 → 裁剪空间 → NDC → 屏幕坐标
  • 三角函数:正弦、余弦、弧度制
  • 线性插值:lerp、slerp
  • 四元数(进阶):万向锁问题、平滑旋转

3. HTML/CSS 基础

  • Canvas 元素理解
  • 事件坐标系统

第二阶段:WebGL 核心概念

4. 渲染管线理解

顶点数据 → 顶点着色器 → 图元装配 → 光栅化 → 片元着色器 → 深度/模板测试 → 混合 → 帧缓冲
  • 每个阶段的作用
  • 可编程阶段 vs 固定功能阶段
  • GPU 并行处理原理

5. WebGL 上下文与基础

  • 获取 WebGL 上下文(getContext('webgl')或'webgl2')
  • 视口设置(viewport)
  • 清除缓冲区(颜色、深度、模板)
  • 状态机概念(WebGL 是状态机)

6. 缓冲区对象(BufferObject)

  • 创建缓冲区(createBuffer)
  • 绑定缓冲区(bindBuffer)
  • 传递数据(bufferData)
  • 类型:ARRAY_BUFFER、ELEMENT_ARRAY_BUFFER

第三阶段:着色器编程(核心难点)

7. GLSL 语言基础

  • 数据类型:float、int、bool、vec2/3/4、mat2/3/4、sampler2D
  • 限定符:attribute、uniform、varying(WebGL 1.0)
  • WebGL 2.0:in、out、uniform
  • 内置变量:
  • 顶点:gl_Position、gl_PointSize
  • 片元:gl_FragColor、gl_FragCoord
  • 函数与控制流:if/else、for、while、自定义函数
  • 内置函数:
  • 三角函数:sin、cos、tan
  • 数学函数:pow、sqrt、abs、clamp、mix、step、smoothstep
  • 向量函数:length、dot、cross、normalize、reflect、refract

8. 顶点着色器

  • 顶点变换(MVP 矩阵:Model-View-Projection)
  • 传递数据到片元着色器(varying/out)
  • 逐顶点光照计算(Gouraud 着色)
  • 顶点动画(波浪、旗帜飘动)

9. 片元着色器

  • 像素颜色输出
  • 纹理采样(texture2D/texture)
  • 逐像素光照计算(Phong、Blinn-Phong)
  • 程序化生成(噪声、条纹、棋盘格)

第四阶段:纹理与贴图

10. 纹理基础

  • 创建纹理(createTexture)
  • 绑定与配置(bindTexture、texParameteri)
  • 加载图像数据(texImage2D)
  • 纹理坐标(UV:0-1 范围)
  • Mipmap 生成(generateMipmap)

11. 纹理参数

  • 过滤方式:NEARESTvsLINEAR、Mipmap 链
  • 环绕方式:CLAMP_TO_EDGE、REPEAT、MIRRORED_REPEAT
  • 各向异性过滤(EXT_texture_filter_anisotropic)

12. 高级纹理

  • 多纹理混合(多层贴图)
  • 立方体纹理(天空盒、环境映射)
  • 数据纹理(texImage2D用 TypedArray)
  • 渲染到纹理(帧缓冲对象 Framebuffer Object)

第五阶段:光照与材质

13. 光照模型原理

  • 环境光照(Ambient):基础亮度
  • 漫反射光照(Diffuse):Lambert 余弦定律
  • 镜面高光(Specular):Phong / Blinn-Phong
  • 光照计算公式:
Color = Ambient + Diffuse + Specular
  • 光源类型:平行光、点光源、聚光灯

14. 法线贴图与凹凸贴图

  • 切线空间转换
  • 法线贴图采样与解码(normal = normal * 2.0 - 1.0)

第六阶段:3D 数学与矩阵系统

15. 矩阵栈与变换

  • 模型矩阵(位置/旋转/缩放)
  • 视图矩阵(相机位置与朝向)
  • 投影矩阵(透视投影 vs 正交投影)
  • 矩阵乘法顺序(MVP = Projection * View * Model)

16. 相机系统

  • 第一人称相机(欧拉角)
  • 轨道相机(围绕目标点旋转)
  • 相机的lookAt矩阵构造
  • 视图矩阵的逆矩阵计算

第七阶段:高级渲染技术

17. 帧缓冲对象(FBO)

  • 离屏渲染
  • 后期处理特效(泛光、模糊、颜色校正)
  • 阴影映射(Shadow Mapping)
  • 反射/折射渲染

18. 多渲染目标(MRT,WebGL 2.0)

  • 一次渲染写入多张纹理
  • G 缓冲区(延迟渲染 Deferred Rendering)

19. 实例化渲染(Instanced Rendering)

  • 大量重复物体的高效渲染
  • drawArraysInstanced/drawElementsInstanced
  • gl_InstanceID内置变量

第八阶段:WebGL 2.0 新特性

20. 核心改进

  • 3D 纹理(TEXTURE_3D)
  • 采样器对象(Sampler Object)
  • 统一缓冲区对象(Uniform Buffer Object,UBO)
  • 顶点数组对象(Vertex Array Object,VAO)
  • 变换反馈(Transform Feedback)
  • 直接状态访问(无需频繁bind)

第九阶段:性能优化

21. 渲染优化

  • 减少状态切换(批次合并 Batch)
  • 视锥体裁剪(Frustum Culling)
  • 遮挡剔除(Occlusion Culling)
  • 绘制调用最小化(Draw Call Batching)

22. 内存优化

  • 纹理压缩(S3TC、PVRTC、ASTC)
  • 顶点数据压缩(量化)
  • 资源复用与池化

23. 着色器优化

  • 避免动态分支
  • 减少复杂计算(预计算)
  • 使用低精度(mediump、lowp)

第十阶段:调试与工具

24. 调试工具

  • 浏览器开发者工具(Performance、Memory)
  • Spector.js(WebGL 调用捕获与回放)
  • RenderDoc(帧调试器)
  • WebGL Inspector

25. 常见问题排查

  • 黑屏/白屏(检查着色器编译、矩阵、视口)
  • 纹理不显示(检查图像加载、纹理坐标、Mipmap)
  • 性能瓶颈定位(Draw Call 数量、纹理内存)

第十一阶段:框架与实战

26. 辅助库学习

  • TWGL(减少 WebGL 样板代码)
  • Three.js(理解其封装原理)
  • Regl(函数式 WebGL)

27. 实战项目路径

  1. 简单三角形→ 理解管线流程
  2. 彩色立方体→ 顶点颜色插值
  3. 纹理贴图立方体→ 纹理采样
  4. 光照球体→ 逐顶点/逐像素光照
  5. 模型加载(OBJ/GLTF)→ 复杂网格渲染
  6. 粒子系统→ 大量物体实例化
  7. 后期特效→ 帧缓冲 + 着色器
  8. 简单游戏引擎→ 整合所有知识

学习路线图(建议顺序)

阶段1-2: JS + 数学基础(2-4周) ↓ 阶段3-4: WebGL 上下文 + 第一个三角形(1周) ↓ 阶段5: 着色器基础 + 变换(2周) ↓ 阶段6: 纹理与颜色(1-2周) ↓ 阶段7: 3D 空间与相机(2周) ↓ 阶段8: 光照模型(2-3周) ↓ 阶段9: 帧缓冲与后期(2周) ↓ 阶段10: 高级特性(按需学习) ↓ 阶段11: 性能优化(持续) ↓ 阶段12: 实战项目(4-8周)

推荐学习资源

书籍

  • 《WebGL 编程指南》(入门圣经,虽然版本老但原理扎实)
  • 《OpenGL ES 3.0 编程指南》
  • 《Real-Time Rendering》(进阶)

在线资源

  • Learn WebGL(https://learnwebgl.brown37.net)
  • WebGL Fundamentals(https://webglfundamentals.org)
  • The Book of Shaders(https://thebookofshaders.com)
  • ShaderToy(学习片元着色器神器)

练习平台

  • CodePen / JSFiddle(快速原型)
  • ShaderToy(仅片元着色器)
  • 自己搭建本地服务器(避免跨域问题)

关键提醒

  1. 不要一上来就学 Three.js:Three.js 封装了太多细节,跳过底层会让你遇到性能问题时无从下手。

  2. 着色器是最核心的障碍:先写顶点着色器画一个三角形,再写片元着色器改颜色,慢慢增加复杂度。

  3. 数学不能跳过:矩阵乘法、向量点积叉积是基本功,不然后面光照和相机看不懂。

  4. 调试会比 JS 痛苦:着色器编译错误信息不友好,准备好用 Spector.js 和浏览器开发者工具。

  5. 先 WebGL 1.0 再 2.0:兼容性考虑,1.0 的 Attribute/Uniform 限制会让你理解底层机制。

结构如下:

workspace/webgl-learning/ ├── README.md # 总览导航 ├── 01-前置基础 ├── 02-WebGL 核心概念 ├── 03-着色器编程 ├── 04-纹理与贴图 ├── 05-光照与材质 ├── 06-3D 数学与矩阵 ├── 07-高级渲染技术 ├── 08-WebGL 2.0 新特性 ├── 09-性能优化 ├── 10- 调试与工具 └── 11-实战项目与资源
返回列表