- WebGL 示例
- WebGL - 绘制点
- WebGL - 绘制三角形
- WebGL - 绘制模式
- WebGL - 绘制四边形
- WebGL - 颜色
- WebGL - 平移
- WebGL - 缩放
- WebGL - 旋转
- WebGL - 立方体旋转
- WebGL - 交互式立方体
- WebGL 有用资源
- WebGL - 快速指南
- WebGL - 有用资源
- WebGL - 讨论
关联属性与缓冲对象
顶点着色器程序中的每个属性都指向一个顶点缓冲对象。创建顶点缓冲对象后,程序员必须将它们与顶点着色器程序的属性关联起来。每个属性只指向一个顶点缓冲对象,从中提取数据值,然后这些属性被传递到着色器程序。
要将顶点缓冲对象与顶点着色器程序的属性关联,您需要按照以下步骤操作:
- 获取属性位置
- 将属性指向顶点缓冲对象
- 启用属性
获取属性位置
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);