WebGL动画与实现|青训营笔记

94 阅读1分钟

这是我参与「第四届青训营 」笔记创作活动的的第14天。本节课的主题是【WebGL动画与实现】,授课老师为月影。

本篇笔记分别对课程中所讲的几个要点进行一些解读,如若有误,欢迎大家在评论区交流,指出不当之处。

Why WebGL/GPU?

  • WebGL是什么?

    • GPU≠WebGL≠3D
  • WebGL需要理解一些硬件底层原理

流程:

Data→Processor→Frame buffer→pixels

CPU VS GPU

CPU内核数==管道数

  • GPU由大量小运算单元组成
  • 每个处理单元只负责处理很简单的计算
  • 每个运算单元彼此独立
  • 因此所有计算可以并行处理

WebGL & OpenGL

WebGL是OpenGL的子集

image.png

WebGL Startup

  1. 创建WebGL上下文
  2. 创建WebGL Program
  3. 数据送入缓冲区
  4. 数据读取到GPU
  5. GPU执行WebGL程序,输出结果

image.png

Create WebGL Context

The Shaders(着色器)

  1. Vertex Shader
  2. Fragment Shader

Create Program

image.png

Data to Frame Buffer

Frame Buffer to GPU

多少个坐标执行多少次main()

Output

GPU执行WebGL程序,输出结果 对于多边形和复杂的3D图形,通常用Earcut三角剖分算法来绘制

为什么WebGL这么难

2D canvas代码量低,比WebGL简单

3D标准模型的四个齐次矩阵(mat4)

  1. 投影矩阵Projection Matrix
  2. 模型矩阵Model Matrix
  3. 视图矩阵View Matrix
  4. 法向量矩阵Normal Matrix

参考资料

mesh-js/mesh.js: A graphics system born for visualization 😘. (github.com)

Glsl Doodle (webgl.group)

SpriteJS ~ Next - 下一代 SpriteJS

Three.js – JavaScript 3D Library (threejs.org)

Shadertoy BETA