图像位移
位移原理
与在普通的坐标系中一样,只需在需要位移的坐标位置加入相应的矢量即可。(x1, y1, z1, w1) + (x2, y2, z2, w2) -> (x1 + x2, y1 + y2, z1 + z2, w1 + w2)
平移矩阵:
$$
\begin{bmatrix}
x’ \
y’ \
z’ \
1
\end{bmatrix} =
\begin{bmatrix}
1 & 0 & 0 & Tx \
0 & 1 & 0 & Ty \
0 & 0 & 1 & Tz \
0 & 0 & 0 & 1 \
\end{bmatrix} ×
\begin{bmatrix}
x \
y \
z \
1 \
\end{bmatrix}
$$
代码实现
1 | // position = P + ▲P |
图像旋转
旋转原理
将 WebGL 坐标系转为极坐标,然后通过角度计算得出旋转后的左标位置。
旋转矩阵:
$$
\begin{bmatrix}
x’ \
y’ \
z’ \
1 \
\end{bmatrix} =
\begin{bmatrix}
\cos \beta & -\sin \beta & 0 & 0 \
\sin \beta & \cos \beta & 0 & 0 \
0 & 0 & 1 & 0 \
0 & 0 & 0 & 1 \
\end{bmatrix} ×
\begin{bmatrix}
x \
y \
z \
1 \
\end{bmatrix}
$$
代码实现
使用u_SinBCosB存放SinB与CosB。
1 | /** |
绘制不同颜色
绘制过程
- 执行 Vertex Shader,配置顶点。
- 调用
gl.drawArrays(),装配图形。 - 光栅化,将图形转换为 Fragment。
- 执行 Fragment Shader。
代码实现
使用varying标识符
1 | const vShaderSource = ` |
绘制多个点
绘制步骤
- 创建顶点数组。
- 创建一个 Buffer。
- 将 WebGL 的 ARRAY_BUFFER 指向所创建的 Buffer。
- 将顶点数组赋值到 Buffer 中。
- 将 Buffer 分配给 Vertex Shader 中的 Attribute。
- 让 Vertex Shader 访问 Buffer。
1 | const vShaderSource = ` |