WebGLRenderingContext: vertexAttrib[1234]f[v]() Methode
Baseline
Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since Juli 2015.
Hinweis: Diese Funktion ist in Web Workers verfügbar.
Die WebGLRenderingContext.vertexAttrib[1234]f[v]() Methoden der WebGL API legen konstante Werte für generische Vertex-Attribute fest.
Syntax
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)
Parameter
index-
Ein
GLuint, der die Position des zu ändernden Vertex-Attributs angibt. v0,v1,v2,v3-
Ein Gleitkomma-
Numberfür den Vertex-Attributwert. value-
Ein
Float32Arrayfür Gleitkomma-Vektor-Vertex-Attributwerte.
Rückgabewert
Keiner (undefined).
Beschreibung
Obwohl Vertex-Attribute normalerweise verwendet werden, um Werte anzugeben, die für jeden Vertex unterschiedlich sind (unter Verwendung von vertexAttribPointer), kann es nützlich sein, einen konstanten Wert anzugeben. Beispielsweise, wenn Sie einen Shader haben, der ein color Vertex-Attribut hat, aber Sie alles in einer einzigen Farbe zeichnen möchten, können Sie vertexAttrib verwenden, um dies zu erreichen, ohne einen Puffer zu erstellen, der nur einen Wert enthält, oder einen separaten Shader zu erstellen, der ein Uniform für die Farbe verwendet.
Dieser Wert wird verwendet, wenn ein gebundener Array-Puffer nicht mit enableVertexAttribArray aktiviert wurde.
Attribute können Matrizen sein, in diesem Fall müssen die Spalten der Matrix in aufeinanderfolgende Vertex-Attributslots geladen werden.
Die mit vertexAttrib gesetzten Werte sind kontextglobal; das heißt, sie gehören nicht zum Shaderzustand (wie generische Vertex-Attributindizes zu Shader-Variablenbindungen) und sie sind nicht Teil des Vertex-Array-Objektzustands (wie aktivierte Vertex-Attributarrays). Der einzige Weg, die Werte zu ändern, besteht darin, diese Funktion erneut aufzurufen.
Beispiele
const index = gl.getAttribLocation(shaderProgram, "foobar");
// Either set each component individually:
gl.vertexAttrib3f(index, 10.0, 5.0, 2.0);
// Or provide a Float32Array:
const floatArray = new Float32Array([10.0, 5.0, 2.0]);
gl.vertexAttrib3fv(index, 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);
Spezifikationen
| Specification |
|---|
| WebGL Specification> # 5.14.10> |