关联属性与缓冲对象



顶点着色器程序中的每个属性都指向一个顶点缓冲对象。创建顶点缓冲对象后,程序员必须将它们与顶点着色器程序的属性关联起来。每个属性只指向一个顶点缓冲对象,从中提取数据值,然后这些属性被传递到着色器程序。

要将顶点缓冲对象与顶点着色器程序的属性关联,您需要按照以下步骤操作:

  • 获取属性位置
  • 将属性指向顶点缓冲对象
  • 启用属性

获取属性位置

WebGL 提供了一个名为 getAttribLocation() 的方法,该方法返回属性位置。其语法如下:

ulong getAttribLocation(Object program, string name)

此方法接受顶点着色器程序对象和顶点着色器程序的属性值。

以下代码片段显示了如何使用此方法。

var coordinatesVar = gl.getAttribLocation(shader_program, "coordinates"); 

这里,shader_program 是着色器程序的对象,coordinates 是顶点着色器程序的属性。

将属性指向 VBO

要将缓冲对象分配给属性变量,WebGL 提供了一个名为 vertexAttribPointer() 的方法。以下是此方法的语法:

void vertexAttribPointer(location, int size, enum type, bool normalized, long stride, long offset)

此方法接受六个参数,下面将对它们进行讨论。

  • Location - 指定属性变量的存储位置。在此选项下,您必须传递 getAttribLocation() 方法返回的值。

  • Size - 指定缓冲对象中每个顶点的分量数。

  • Type - 指定数据类型。

  • Normalized - 这是一个布尔值。如果为真,则非浮点数据被规范化到 [0, 1];否则,被规范化到 [-1, 1]。

  • Stride - 指定不同顶点数据元素之间的字节数,或为默认步长指定零。

  • Offset - 指定缓冲对象中的偏移量(以字节为单位),以指示从哪个字节存储顶点数据。如果数据从开头存储,则offset 为 0。

以下代码片段显示了如何在程序中使用 vertexAttribPointer()

gl.vertexAttribPointer(coordinatesVar, 3, gl.FLOAT, false, 0, 0);

启用属性

激活顶点着色器属性以在顶点着色器中访问缓冲对象。对于此操作,WebGL 提供了 enableVertexAttribArray() 方法。此方法接受属性的位置作为参数。以下是在程序中使用此方法的方法:

gl.enableVertexAttribArray(coordinatesVar); 
广告