Zuordnen von Attributen und Pufferobjekten
Jedes Attribut im Vertex-Shader-Programm zeigt auf ein Vertex-Pufferobjekt. Nach dem Erstellen der Vertex-Pufferobjekte müssen Programmierer sie den Attributen des Vertex-Shader-Programms zuordnen. Jedes Attribut zeigt auf nur ein Scheitelpunktpufferobjekt, aus dem die Datenwerte extrahiert werden. Anschließend werden diese Attribute an das Shader-Programm übergeben.
Um die Vertex-Pufferobjekte den Attributen des Vertex-Shader-Programms zuzuordnen, müssen Sie die folgenden Schritte ausführen:
- Holen Sie sich die Attributposition
- Zeigen Sie mit dem Attribut auf ein Scheitelpunktpufferobjekt
- Aktivieren Sie das Attribut
Holen Sie sich den Attributspeicherort
WebGL bietet eine Methode namens getAttribLocation()Dies gibt den Attributspeicherort zurück. Die Syntax lautet wie folgt:
ulong getAttribLocation(Object program, string name)
Diese Methode akzeptiert das Vertex-Shader-Programmobjekt und die Attributwerte des Vertex-Shader-Programms.
Das folgende Codefragment zeigt, wie diese Methode verwendet wird.
var coordinatesVar = gl.getAttribLocation(shader_program, "coordinates");
Hier, shader_program ist das Objekt des Shader-Programms und coordinates ist das Attribut des Vertex-Shader-Programms.
Zeigen Sie mit dem Attribut auf einen VBO
Um das Pufferobjekt der Attributvariablen zuzuweisen, bietet WebGL eine Methode namens vertexAttribPointer(). Hier ist die Syntax dieser Methode -
void vertexAttribPointer(location, int size, enum type, bool normalized, long stride, long offset)
Diese Methode akzeptiert sechs Parameter und sie werden unten diskutiert.
Location- Es gibt den Speicherort einer Attributvariablen an. Bei dieser Option müssen Sie den vom übergebenen Wert übergebengetAttribLocation() Methode.
Size - Gibt die Anzahl der Komponenten pro Scheitelpunkt im Pufferobjekt an.
Type - Es gibt den Datentyp an.
Normalized- Dies ist ein boolescher Wert. Wenn true, werden nicht schwebende Daten auf [0, 1] normalisiert. Andernfalls wird es auf [-1, 1] normalisiert.
Stride - Gibt die Anzahl der Bytes zwischen verschiedenen Scheitelpunktdatenelementen oder Null für den Standardschritt an.
Offset- Es gibt den Versatz (in Bytes) in einem Pufferobjekt an, um anzugeben, von welchem Byte die Scheitelpunktdaten gespeichert werden. Wenn die Daten von Anfang an gespeichert werden, beträgt der Offset 0.
Das folgende Snippet zeigt die Verwendung vertexAttribPointer() in einem Programm -
gl.vertexAttribPointer(coordinatesVar, 3, gl.FLOAT, false, 0, 0);
Aktivieren des Attributs
Aktivieren Sie das Vertex-Shader-Attribut, um auf das Pufferobjekt in einem Vertex-Shader zuzugreifen. Für diesen Vorgang stellt WebGL bereitenableVertexAttribArray()Methode. Diese Methode akzeptiert die Position des Attributs als Parameter. So verwenden Sie diese Methode in einem Programm:
gl.enableVertexAttribArray(coordinatesVar);