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 July 2015.
Hinweis: Dieses Feature ist verfügbar in Web Workers.
Die WebGLRenderingContext.vertexAttrib[1234]f[v]()
-Methoden der WebGL API legen konstanten
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
Rückgabewert
Kein (undefined
).
Beschreibung
Während Vertex-Attribute üblicherweise verwendet werden, um Werte anzugeben, die sich für jeden
Vertex unterscheiden (mithilfe von vertexAttribPointer
), kann es nützlich sein, einen konstanten Wert festzulegen.
Zum Beispiel, wenn Sie einen Shader haben, der ein color
-Vertex-Attribut hat, aber alles in einer einzigen Farbe zeichnen möchten, können Sie vertexAttrib
verwenden, um dies zu erreichen, ohne einen Puffer mit nur einem Wert zu erstellen oder einen separaten Shader zu erstellen, der eine 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-Attribut-Slots geladen werden.
Die mit vertexAttrib
gesetzten Werte sind kontext-global; das heißt, sie sind nicht Teil des Shader-Zustands
(wie generische Vertex-Attribut-Indizes zu Shader-Variablenbindungen) und nicht Teil des
Vertex-Array-Objekt-Zustands (wie aktivierte Vertex-Attribut-Arrays). Der einzige Weg, die Werte zu
ändern, besteht darin, diese Funktion erneut aufzurufen.
Beispiele
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);
Spezifikationen
Specification |
---|
WebGL Specification # 5.14.10 |
Browser-Kompatibilität
BCD tables only load in the browser