在顶点着色器程序中的每个属性点为顶点缓冲区对象。创建顶点缓冲区对象之后,程序员必须将它们与顶点着色器程序的属性相关联。每个属性点只有一个顶点缓冲对象,从它们中提取数据值,然后将这些属性传递给着色器程序。
到了顶点缓冲对象的顶点着色器程序的属性联系起来,必须按照下面的步骤 -
-
获取属性的位置
-
点属性顶点缓冲区对象
-
启用属性
获取属性的位置
WebGL提供一种方法 getAttribLocation(),它返回属性的位置。它的语法如下-
ulong getAttribLocation(Object program, string name)
此方法接受顶点着色器的程序对象和顶点着色器程序的属性值。
下面的代码片段展示了如何使用此方法。
var coordinatesVar = gl.getAttribLocation(shader_program, "coordinates");
这里,shader_program是着色器程序对象和坐标是顶点着色器程序的属性。
指向属性到VBO
要分配缓冲对象的属性变量,WebGL提供了一个名为vertexAttribTutorialser()的方法。下面是该方法的语法-
void vertexAttribTutorialser(location, int size, enum type, bool normalized, long stride, long offset)
此方法接受六个参数,它们讨论下面。
-
Location − 它指定一个属性变量的存储位置。根据这个方案,必须通过由getAttribLocation()方法返回的值
-
Size − 它指定在缓冲对象每顶点部件的数量
-
Type − 它指定数据的类型
-
Normalized − 这是一个布尔值。如果为真,非浮动数据被归一化到[0,1]。否则,它被归一化到[-1,1]。
-
Stride − 它指定不同顶点数据元素之间的字节数,或默认为零步幅。
-
Offset − 它指定在缓冲器对象,以指示数据从顶点的哪个存储字节偏移(字节)。如果数据是从开始(beginning)存储的,偏移量(offset)为0。
下面的片段展示了如何在程序中使用 vertexAttribTutorialser() -
gl.vertexAttribTutorialser(coordinatesVar, 3, gl.FLOAT, false, 0, 0);
启用属性
激活顶点着色器属性来访问缓冲对象的顶点着色器。对于该操作,WebGL 提供 enableVertexAttribArray()方法。这个方法接受属性作为参数位置。以下是如何在程序中使用此方法-
gl.enableVertexAttribArray(coordinatesVar);