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

101 阅读2分钟

WebGL 与动画实现

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

1.初识WebGL

WebGL(Web 图形库)是一个 JavaScript API,可在任何兼容的 Web 浏览器中渲染高性能的交互式 3D 和 2D 图形,而无需使用插件。WebGL 通过引入一个与 OpenGL ES 2.0 非常一致的 API 来做到这一点,该 API 可以在 HTML5元素中使用。 这种一致性使 API 可以利用用户设备提供的硬件图形加速。

  • 光栅:几乎所有的现代图形系统都是基于光栅来绘制图形的,光栅就是指构成图像的像素阵列
  • 像素:一个像素对应图像上的一个点,它通常保存图像上的某个具体位置的颜色等信息
  • 帧缓存:在绘图过程中,像素信息被存放于帧缓存中,帧缓存是一块内存地址
  • CPU: 中央处理单元,负责逻辑计算
  • GPU:图像处理单元,负责图像计算

2.CPUvsGPU

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

3.WebGL Startup

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

4.Create WebGL Context

 const canvas = document/querySelector('canvas')
 const gl = canvas.getContext('webgl')
 ​
 function create3DContext(canvas,options) {
     const names = ['webgl,'experimental-webgl','webkit-3d','moz-webgl'];
     if(options.webgl2) names.unshift("wegl2")
     let context = null;
     for(let i=0;i<name.length;i++){
         try{
             context = canvas.getContext(names[i],options);
         }catch(e){
         
         }
         if(context) break
         
     }
     return context
 }

4.3D Matrix

  1. 投影矩阵
  2. 模型矩阵
  3. 视图矩阵
  4. 法向量矩阵

5.WebGL 基本原理

WebGL 的出现使得在浏览器上面实现显示 3D 图像成为可能,WebGL 本质上是基于光栅化的 API ,而不是基于 3D 的 API。. WebGL 只关注两个方面,即投影矩阵的坐标和投影矩阵的颜色。. 使用 WebGL 程序的任务就是实现具有投影矩阵坐标和颜色的 WebGL 对象即可。. 可以使用“着色器”来完成上述任务。. 顶点着色器可以提供投影矩阵的坐标,片段着色器可以提供投影矩阵的颜色。. 无论要实现的图形尺寸有多大,其投影矩阵的坐标的范围始终是从 -1 到 1 。