Spec-Zone.ru › Web APIs

WebGL2RenderingContext: метод vertexAttribIPointer()

Базовая Широко доступная

Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузера. Она доступна в браузерах с сентября 2021 года.

  • Узнать больше
  • Полная совместимость
  • Отправить отзыв

Примечание: Эта функция доступна в Потоках веб-работы.

Метод WebGL2RenderingContext.vertexAttribIPointer() API WebGL 2 определяет форматы целочисленных данных и расположения атрибутов вершин в массиве атрибутов вершин.

Синтаксис

vertexAttribIPointer(index, size, type, stride, offset)

Параметры

index

A GLuint определяющий индекс атрибута вершины, который требуется изменить.

size

A GLint определяющий количество компонентов на атрибут вершины. Должно быть 1, 2, 3 или 4.

type

A GLenum определяющий тип данных каждого компонента в массиве. Должно быть одно из значений: gl.BYTE, gl.UNSIGNED_BYTE, gl.SHORT, gl.UNSIGNED_SHORT, gl.INT, или gl.UNSIGNED_INT.

stride

A GLsizei определяющий смещение в байтах между началом последовательных атрибутов вершины.

offset

A GLintptr определяющий смещение в байтах первого компонента в массиве атрибутов вершины. Должно быть кратно type.

Значение результата

None (undefined).

Описание

Очень похож на WebGLRenderingContext.vertexAttribPointer(). Основное различие заключается в том, что в то время как значения, заданные vertexAttribPointer, всегда интерпретируются как значения с плавающей точкой в шейдере (даже если они были изначально заданы как целые числа в буфере), этот метод позволяет задавать значения, интерпретируемые как целые числа в шейдере.

Примеры

Линейное смешивание скелетирования

//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>

Спецификации

Спецификация
Спецификация WebGL 2.0
# 3.7.8

Совместимость с браузерами

Рабочие столы Мобильные устройства
Chrome Edge Firefox Opera Safari Chrome Android Firefox для Android Opera Android Safari на IOS Samsung Internet WebView Android
vertexAttribIPointer 56 79 51 43 15 58 51 43 15 7.0 58

См. также

  • WebGLRenderingContext.vertexAttribPointer()

© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext/vertexAttribIPointer

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API