(资料图片仅供参考)
我们说过,一个顶点就是一个集合,这个集合中可以具有顶点的多个属性,例如位置、颜色、法线方向、纹理坐标等。之前我们只在这个集合中设置了顶点的位置,这次我们打算把颜色也添加进去。
现在我们每个顶点将由六个浮点数构成,其中前三个描述顶点的位置,后三个描述顶点的颜色:
由于现在有更多的数据要发送到顶点着色器,我们需要调整一下顶点着色器。其中顶点位置的位置值(location)依然是0,顶点颜色的位置值则设置为1(这里我们没有使用全局变量uniform来设置颜色):
注意,在这里的所有变量中,除了gl_Position是GLSL的内置输出变量,其余都可以随意命名。v_color是我们向顶点着色器发送的变量,顶点着色器将其处理后成为输出变量my_color再发送给片段着色器,片段着色器接收my_color,对其处理后,输出最终的颜色color。
因为我们添加了另一个顶点属性,在修改完着色器后,下一步我们要重新配置顶点属性:
在这里,第五个参数步长变为了6个浮点数的长度,因为现在每一个顶点的属性是2*3个浮点数,也就是顶点的某个属性与下一个顶点的某个属性的距离即下标之差为6。第六个参数是属性在起始位置的偏移量,因为位置属性是第一个属性,所以它的偏移量为0(即每个顶点中第一个数据就是位置属性),而颜色是第二个属性,所以它的偏移量为3个浮点数(即每个顶点中第四个数据是颜色属性)。
由于我们为每一个顶点都设置了不同的颜色,运行程序会得到一个彩色的图形:
标签: