WebGL2RenderingContext: vertexAttribIPointer() 方法

基线 广泛可用

此功能已经成熟,并在许多设备和浏览器版本上运行。它自 2021 年 9 月.

报告反馈

语法

WebGL2RenderingContext.vertexAttribIPointer() 方法是 WebGL 2 API 的一个方法,它指定了顶点属性数组中顶点属性的整数数据格式和位置。
vertexAttribIPointer(index, size, type, stride, offset)

js

参数

index

一个 GLuint,指定要修改的顶点属性的索引。

size

一个 GLint,指定每个顶点属性的组件数量。必须为 1、2、3 或 4。

type

一个 GLenum,指定数组中每个组件的数据类型。必须是以下之一:gl.BYTEgl.UNSIGNED_BYTEgl.SHORTgl.UNSIGNED_SHORTgl.INTgl.UNSIGNED_INT

stride

一个 GLsizei,指定连续顶点属性的开始位置之间的偏移量(以字节为单位)。

offset

一个 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 规范

另请参阅