WebGL | 青训营笔记

92 阅读1分钟

WebGL

初识WebGL

Why WebGL / Why GPU?

  • WebGL 是什么?

    • GPU ≠ WebGl ≠ 3D
  • WebGL 为什么不像其他前端技术那么简单?

Modern Graphics System

image.png

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

image.png

  1. 轮廓提取 / meshing
  2. 光栅化
  3. 帧缓存
  4. 渲染

The Pipeline

image.png

CPU vs GPU

image.pngimage.png

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

WebGL & OpenGL

web.eecs.umich.edu/~sugih/cour…image.png

WebGL Startup

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

image.png

Create WebGL Context

image.png

The Shaders

  1. Vertex Shader

image.png2. Fragment Shaderimage.png

Create Program

image.png

Data to Frame Buffer

image.png

Frame Buffer to GPU

image.png

Mesh.js

github.com/mesh-js/mes…

2D:image.pngmesh.js:image.png

Polygons

image.png

image.png

Draw Polygon with 2D Triangulations

使用 Earcut 进行三角部分 github.com/mapbox/earc…image.pngimage.png

3D Meshing

spritejs.com/demo/#/3d/w…image.png

Transforms

平移:image.png

旋转:image.png

缩放:image.png

旋转+缩放是线性变换image.png从线性变换到齐次矩阵

Apply Transforms

image.pngimage.png

3D Matrix

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

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

Read more

  1. The book of shaders thebookofshaders.com/
  2. Mesh.js github.com/mesh-js/mes…
  3. glsl-doodle doodle.webgl.group/
  4. SpriteJS spritejs.com/#/
  5. ThreeJS threejs.org/
  6. ShaderToy www.shadertoy.com/
  7. 稀土掘金 juejin.cn/column/7100…