颜色与纹理
MutiAttributeSize
本案例主要介绍如何将多个顶点数据通过缓冲区对象传入顶点着色器
MutiAttributeSize Code
1 |
|
1 | let VSHADER_SOURCE = |
2种支持传递多种顶点数据信息的方式
方法1:创建多个缓冲区对象
最简单粗暴的一种方式。
要向Vertex_Shader传递多份逐顶点数据信息?
只需要为顶点的每种数据建立一个缓冲区就OK了。
OS:这种方法就像学校的教科书,每章习题不加在这一章后面,非要配套来一套习题集,做题时两本书加草稿纸摊开桌子乱的笔都找不到。(脑补一下桌子对应的就是运行环境)
方法2:利用vertexAttribPointer的步进和偏移参数
创建多个缓冲区比较适合 数据量不大的情况。
更常用的是利用某些机制分别访问统一缓冲区对象中的不同种类数据。
这里介绍的是 交错组织(interleaving)
即将不同种类数据交叉存储在一个缓冲区中,
利用vertexAttribPointer的 步进(stride) 和 偏移(offset) 来获取特定数据。
1 | let verticesSizes = new Float32Array([ |
MultiAttributeSize_Interleaved
本案例主要介绍利用vertexAttribPointer的步进和偏移来获取特定数据。
MutiAttributeSize_Interleaved
1 |
|
1 | let VSHADER_SOURCE = |
vertexAttribPointer的作用机制
BYTES_PRE_ELEMENT
类型化数组的默认属性,可以表示数组中 每个元素所占的字节数 。
MultiAttributeColor(varying变量)
本程序主要介绍如何使Vertex_Shader的数据进入Fragment_Shader。
(提前剧透:使用varying变量)
MultiAttributeColor
1 |
|
1 | let VSHADER_SOURCE = |
varying变量
varying变量可选类型:
- float
- vec[2-4]
- mat[2-4]
我们在Vertex_Shader中声明了一个varying变量,那Fragment_Shader要怎么接收呢?
答:在Fragment_Shader中声明一个同名且同类型的varying变量就可以了。