WebGL2RenderingContext: vertexAttribIPointer() 方法
基线 广泛可用
此功能已经成熟,并在许多设备和浏览器版本上运行。它自 2021 年 9 月.
报告反馈
语法
WebGL2RenderingContext.vertexAttribIPointer()
方法是 WebGL 2 API 的一个方法,它指定了顶点属性数组中顶点属性的整数数据格式和位置。vertexAttribIPointer(index, size, type, stride, offset)
js
一个 GLintptr
,指定顶点属性数组中第一个组件的偏移量(以字节为单位)。必须是 type
的倍数。
返回值
描述
无(undefined
)。
示例
与 WebGLRenderingContext.vertexAttribPointer()
非常类似。主要区别在于,vertexAttribPointer
指定的值始终在着色器中被解释为浮点数(即使它们最初在缓冲区中指定为整数),而此方法允许指定在着色器中被解释为整数的值。
WebGL2RenderingContext.vertexAttribIPointer()
方法是 WebGL 2 API 的一个方法,它指定了顶点属性数组中顶点属性的整数数据格式和位置。//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");
线性混合蒙皮
<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>
规范
html |
---|
规范 # 3.7.8 |
浏览器兼容性
WebGL 2.0 规范