WebGLRenderingContext: vertexAttrib[1234]f[v]() метод
Базовая линия Широко доступно
Эта функция хорошо отработана и работает на многих устройствах и версиях браузеров. Она доступна во всех браузерах с июля 2015 года.
Примечание: Эта функция доступна в Потоках веб-работы.
Методы WebGLRenderingContext.vertexAttrib[1234]f[v]() API WebGL задают постоянные значения для общих атрибутов вершин.
Синтаксис
vertexAttrib1f(index, v0) vertexAttrib2f(index, v0, v1) vertexAttrib3f(index, v0, v1, v2) vertexAttrib4f(index, v0, v1, v2, v3) vertexAttrib1fv(index, value) vertexAttrib2fv(index, value) vertexAttrib3fv(index, value) vertexAttrib4fv(index, value)
Параметры
index-
Значение
GLuint, указывающее положение атрибута вершины, который нужно изменить. v0,v1,v2,v3-
Значение с плавающей запятой
Numberдля атрибута вершины. value-
Массив
Float32Arrayдля значений атрибутов вершины в виде векторов с плавающей запятой.
Возвращаемое значение
Ничего (undefined).
Описание
Хотя атрибуты вершин обычно используются для задания значений, отличающихся для каждой вершины (используя vertexAttribPointer), полезно задавать постоянное значение. Например, если у вас есть шейдер с атрибутом вершины color, но вы хотите отрисовать всё одним цветом, вы можете использовать vertexAttrib, чтобы добиться этого, не создавая буфер, заполненный только одним значением, или не создавая отдельный шейдер, использующий униформу для цвета.
Это значение будет использоваться, если связанный буфер массивов не был включён с помощью enableVertexAttribArray.
Атрибуты могут быть матрицами, в этом случае столбцы матрицы должны загружаться в последовательные слоты атрибутов вершин.
Значения, заданные с помощью vertexAttrib, являются глобальными для контекста; то есть они не являются частью состояния шейдера (как индексы общих атрибутов вершин для связей переменных шейдера) и не являются частью состояния объекта массива вершин (как включённые массивы атрибутов вершин). Единственный способ изменить значения — это повторно вызвать эту функцию.
Примеры
const a_foobar = gl.getAttribLocation(shaderProgram, "foobar"); //either set each component individually: gl.vertexAttrib3f(a_foobar, 10.0, 5.0, 2.0); //or provide a Float32Array: const floatArray = new Float32Array([10.0, 5.0, 2.0]); gl.vertexAttrib3fv(a_foobar, floatArray);
// we want to load the following 3x3 matrix into attribute named "matrix3x3" // 0 1 2 // 3 4 5 // 6 7 8 const matrix3x3Location = gl.getAttribLocation(shaderProgram, "matrix3x3"); gl.vertexAttrib3f(matrix3x3Location, 0, 3, 6); gl.vertexAttrib3f(matrix3x3Location + 1, 1, 4, 7); gl.vertexAttrib3f(matrix3x3Location + 2, 2, 5, 8);
Спецификации
| Спецификация |
|---|
| Спецификация WebGL # 5.14.10 |
Совместимость с браузерами
| Рабочие столы | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на IOS | Samsung Internet | WebView Android | |
vertexAttrib |
9 | 12 | 4 | 12 | 5.1 | 25 | 4 | 12 | 8 | 1.5 | 4.4.3 |
См. также
© 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/WebGLRenderingContext/vertexAttrib