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);