WebGL2RenderingContext: vertexAttribIPointer() 方法
注意:此功能在 Web Workers 中可用。
WebGL2RenderingContext.vertexAttribIPointer() 方法是 WebGL 2 API 的一部分,用于指定顶点属性数组中的整数数据格式和位置。
语法
js
vertexAttribIPointer(index, size, type, stride, offset)
参数
返回值
无(undefined)。
描述
与 WebGLRenderingContext.vertexAttribPointer() 非常相似。主要区别在于,虽然 vertexAttribPointer 指定的值在着色器中始终被解释为浮点值(即使它们最初在缓冲区中被指定为整数),但此方法允许指定在着色器中被解释为整数的值。
示例
线性混合蒙皮
js
// Describe the layout of the buffer:
// 1. position
gl.vertexAttribPointer(0, 3, gl.FLOAT, false, 20, 0);
gl.enableVertexAttribArray(0);
// 2. bone weights, normalized to [0, 1]
gl.vertexAttribPointer(1, 4, gl.UNSIGNED_BYTE, true, 20, 12);
gl.enableVertexAttribArray(1);
// 3. bone indices, interpreted as integer
gl.vertexAttribIPointer(2, 4, gl.UNSIGNED_BYTE, 20, 16);
gl.enableVertexAttribArray(2);
// Connect to attributes from the vertex shader
gl.bindAttribLocation(shaderProgram, 0, "position");
gl.bindAttribLocation(shaderProgram, 1, "boneWeights");
gl.bindAttribLocation(shaderProgram, 2, "boneIndices");
html
<script id="shader-vs" type="x-shader/x-vertex">
#version 300 es
uniform mat4 mvMatrix;
uniform mat4 bones[120];
in vec3 position;
in vec4 boneWeights;
in uvec4 boneIndices;//read as 4-component unsigned integer
void main() {
vec4 skinnedPosition =
bones[boneIndices.s] * vec4(position, 1.0) * boneWeights.s +
bones[boneIndices.t] * vec4(position, 1.0) * boneWeights.t +
bones[boneIndices.p] * vec4(position, 1.0) * boneWeights.p +
bones[boneIndices.q] * vec4(position, 1.0) * boneWeights.q;
gl_Position = mvMatrix * skinnedPosition;
}
</script>
规范
| 规范 |
|---|
| WebGL 2.0 规范 # 3.7.8 |
浏览器兼容性
加载中…