Skip to content

Commit ef95382

Browse files
committed
feat: glsl
1 parent bc46a09 commit ef95382

File tree

1 file changed

+115
-4
lines changed

1 file changed

+115
-4
lines changed

Diff for: docs/canvas.md

+115-4
Original file line numberDiff line numberDiff line change
@@ -171,21 +171,19 @@ void main() {
171171

172172
### 数据类型
173173

174-
175-
176174
### 内置函数
177175

178176

179177

180-
### Texture 与 UV
178+
### 纹理(Texture)、UV坐标与采样
181179

182180
把一张图片作为Texture纹理,图片左下角为(0, 0),右上角为(1, 1),可以通过UV坐标来进行采样。
183181

184182

185183

186184

187185

188-
## drawArrays
186+
### drawArrays
189187

190188
`wegl`的实际绘制指令,我们实际上是绘制无数个顶点,绘制线段或三角形,本质上是在点与点之间进行线性插值。
191189

@@ -204,6 +202,119 @@ gl.drawArrays(gl.TRIANGLES, 3, 3)
204202

205203

206204

205+
## 随机数和噪声
206+
207+
噪声在图形学中存在着许多的应用,比如可以实现故障艺术。通常我们会借助随机数来生成噪声图,GLSL内置了`rand`这一确定性随机(即伪随机),但通常我们会自己实现一个伪随机函数。
208+
209+
``` glsl
210+
y = fract(sin(x)*10000.0);
211+
```
212+
213+
为了从二维向量生成随机数,以上的式子又可以被扩展成如下,式子中的魔法数字是经过实践后被广泛使用的数字。
214+
215+
``` glsl
216+
float random (vec2 st) {
217+
return fract(sin(dot(st.xy, vec2(12.9898, 78.233))) * 43758.5453123);
218+
}
219+
```
220+
221+
222+
223+
## 混合模式
224+
225+
### 溶解
226+
227+
> TODO
228+
229+
230+
231+
232+
233+
## 模糊效果
234+
235+
> 高斯模糊
236+
237+
238+
239+
240+
241+
## WebGL渲染管线
242+
243+
1. CPU提供数据(顶点、颜色、UV、法线、纹理等)
244+
2. 顶点着色器(MVP矩阵变换等)
245+
3. 图元装配与裁剪
246+
4. 光栅化
247+
5. 片元着色器
248+
249+
250+
251+
## 线性代数
252+
253+
### 向量
254+
255+
- 向量相加
256+
- 向量数乘
257+
- 向量内积(点积),得到标量
258+
- 向量外积(乘积),得到向量
259+
- 向量的线性组合(常见的组合如线性插值)
260+
261+
### 矩阵
262+
263+
- 矩阵加法
264+
- 矩阵乘法(向量的线性组合)
265+
266+
267+
268+
## Trouble Shooting
269+
270+
1. Shader代码记得加分号。
271+
272+
2. Shader代码中数字记得小数点。
273+
274+
3. 顶点顺序逆时针。
275+
276+
4. 图像绘制反了。
277+
278+
``` glsl
279+
this.gl.pixelStorei(this.gl.UNPACK_FLIP_Y_WEBGL, true);
280+
```
281+
282+
5. 图像绘制黑屏,纹理宽高需要是二的幂。
283+
284+
``` glsl
285+
this.gl.texParameteri(
286+
this.gl.TEXTURE_2D,
287+
this.gl.TEXTURE_MIN_FILTER,
288+
this.gl.LINEAR
289+
);
290+
this.gl.texParameteri(
291+
this.gl.TEXTURE_2D,
292+
this.gl.TEXTURE_WRAP_S,
293+
this.gl.CLAMP_TO_EDGE
294+
);
295+
this.gl.texParameteri(
296+
this.gl.TEXTURE_2D,
297+
this.gl.TEXTURE_WRAP_T,
298+
this.gl.CLAMP_TO_EDGE
299+
);
300+
```
301+
302+
6. WebGL内置8个纹理单元,绑定多个纹理时需要提前激活。
303+
304+
``` glsl
305+
gl.activeTexture(gl.TEXTURE0);
306+
```
307+
308+
309+
310+
311+
312+
313+
314+
## MVP和裁剪空间
315+
316+
> TODO
317+
207318

208319

209320
## 参考链接

0 commit comments

Comments
 (0)