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

34 阅读3分钟

这是我参与「第四届青训营 」笔记创作活动的的第18天

1、什么是WebGL

WebGL经常被当成3D API,人们总想“我可以使用WebGL和一些神奇的东西做出炫酷的3D作品”。 事实上WebGL仅仅是一个光栅化引擎,它可以根据你的代码绘制出点,线和三角形。 想要利用WebGL完成更复杂任务,取决于你能否提供合适的代码,组合使用点,线和三角形代替实现。

WebGL在电脑的GPU中运行。因此你需要使用能够在GPU上运行的代码。 这样的代码需要提供成对的方法。每对方法中一个叫顶点着色器, 另一个叫片断着色器,并且使用一种和C或C++类似的强类型的语言 GLSL。 (GL着色语言)。 每一对组合起来称作一个 program(着色程序)。

顶点着色器的作用是计算顶点的位置。根据计算出的一系列顶点位置,WebGL可以对点, 线和三角形在内的一些图元进行光栅化处理。当对这些图元进行光栅化处理时需要使用片断着色器方法。 片断着色器的作用是计算出当前绘制图元中每个像素的颜色值。

2. 现代图形系统中的相关概念

  • 光栅(Raster):几乎所有的现代图形系统都是基于光栅来绘制图形的,光栅就是指构成图像的像素阵列
  • 像素(Pixel):一个像素对应图像上的一个点,它通常保存图像上某个具体位置的颜色等信息
  • 帧缓存(Frame Buffer):在绘图过程中,像素信息被存放在帧缓存中,帧缓存是一块内存地址
  • 绘制图形的过程:轮廓提取(meshing)、光栅化、帧缓存、渲染
  • GPU(Graphics Processing Unit):图像处理单元,负责图形计算(由于 GPU 由大量的小运算单元构成,每个运算单元只负责处理很简单的计算且彼此独立,因此所有计算可以并行处理,适合对图像中的大量像素点进行处理)

3、WebGL Startup

1.创建WebGL上下文

2.创建WebGL Proaram

3.将数据存入缓冲区

4.将缓冲区数据读取到 GPU

5.GPU 执行WebGL程序,输出结果

4、创建 WebGL 上下文

const canvas = document.createElement("canvas");
const gl = canvas.getContext("webgl");
const program = gl.createProgram();
gl.attachShader(program /*某个着色器(下文的vertexShader)*/);
gl.linkProgram(program);
gl.useProgram(program);
const vertex = `
      attribute vec2 position;
      void main() {
        gl_Position = vec4(position, 1.0, 1.0);
      }
    `;
const vertexShader = gl.createShader(gl.VERTEX_SHADER);
gl.shaderSource(vertexShader, vertex);
gl.compileShader(vertexShader);

5、3D Matrix

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

1.投影矩阵Projection Matrix:处理坐标系

2.模型矩阵Model Matrix:改变大小方向

3.视图矩阵View Matrix:模拟摄像机在某个位置观察,移动摄像机位置观察

4.法向量矩阵Normal Matrix

我们可以根据矩阵,数学模型,来做自己想要做的东西自己创造出如下图一样的东西

5、总结

想深入学习需要很多数学知识