glNormalPointer

Aus DGL Wiki
Version vom 18. März 2012, 17:46 Uhr von Openglerf (Diskussion | Beiträge) (Beschreibung: WäHrend)

(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu: Navigation, Suche

glNormalPointer

Name

glNormalPointer - Spezifiziert ein Feld mit Normalen.


Delphi-Spezifikation

procedure glNormalPointer(_type: TGLenum; stride: TGLsizei; const _pointer: PGLvoid);



Parameter

_type Bestimmt den Datentyp aller Koordinaten im Feld. Folgende symbolische Konstanten sind erlaubt:

GL_BYTE, GL_SHORT, GL_INT, GL_FLOAT, sowie GL_DOUBLE
Vorgabewert ist GL_FLOAT

stride Beschreibt den Byteabstand (Versatz/Offset) zwischen zwei aufeinanderfolgenden Normalen. Ist stride gleich 0 heißt dies, die Normalen sind eng aneinander gepackt im Feld gespeichert.
_pointer Ist ein Zeiger, der auf die erste Koordinate der ersten Normale im Feld zeigt.



Beschreibung

glNormalPointer beschreibt Ort und Datenformat eines Feldes welches Pointer enthält und während des Renderns benutzt werden soll.

_type bestimmt den Datentyp der einzelnen Koordinaten einer Normale.

stride beschreibt den Byteabstand zwischen zwei aufeinanderfolgenden Normalen. Dies erlaubt es Vertices und Normalen zusammen innerhalb eines Feldes oder getrennt in verschiedenen Feldern zu speichern. (Das speichern innerhalb eines Feldes kann bei einigen Implementationen effizienter sein; siehe glInterleavedArrays)

Wird ein Normalenfeld erstellt, werden _type, stride und _pointer clientseitig gespeichert.


Um das Normalenfeld zu aktivieren bzw. deaktivieren rufen sie glEnableClientState bzw. glDisableClientState mit dem Parameter GL_NORMAL_ARRAY auf. Wenn das Feld aktiviert ist, wird es bei Aufrufen von glArrayElement, glDrawElements, oder glDrawArrays benutzt.


Benutzen sie glDrawArrays wenn sie eine Sequenz von Primitiven (alle vom selben Typ) aus vordefinierten Vertex- und Vertexattributfeldern erstellen wollen. Benutzen sie glArrayElement um Primitive durch Indexierung von Vertex- und Vertexattributfeldern zu erstellen und benutzen sie glDrawElements um eine Folge von Primitiven (des selben Typs) durch Indexierung von Vertex- und Vertexattributfeldern zu erstellen.

Hinweise

glNormalPointer ist erst ab OpenGl 1.1 verfügbar.

Das Normalenfeld ist standardmäßig deaktiviert und wird bei Aufrufen von glArrayElement, glDrawElements, or glDrawArrays nicht benutzt.

Das Ausführen von glNormalPointer innerhalb eines glBegin-glEnd blocks ist nicht erlaubt. Trotzdem kann nicht garantiert werden, dass ein Fehler ausgelöst wird. Wird kein Fehler generiert, ist das Ergebnis des Aufrufs undefiniert.

glNormalPointer ist normalerweise Clientseitig implementiert. (siehe OpenGL Eigenschaften)

Da die Eigenschaften der Normalenfeldes clientseitig gespeichert werden, kann glPushAttrib und glPopAttrib nicht zum speichern bzw. laden dieser Eigenschaften verwendet werden. Benutzen Sie statt dessen glPushClientAttrib bzw. glPopClientAttrib.



Fehlermeldungen

GL_INVALID_ENUM wird generiert wenn _type ein ungültiger Wert übergeben wurde.
GL_INVALID_VALUE wird generiert wenn stride ein negativer Wert übergeben wurde.



Zugehörige Wertrückgaben

glIsEnabled mit Token GL_NORMAL_ARRAY
glGet mit Token GL_NORMAL_ARRAY_TYPE
glGet mit Token GL_NORMAL_ARRAY_STRIDE
glGetPointerv mit Token GL_NORMAL_ARRAY_POINTER



Siehe auch

Hintergrundwissen: VBO ohne glInterleavedArrays

glArrayElement, glColorPointer, glDrawArrays, glDrawElements, glEdgeFlagPointer, glEnable, glGetPointerv, glIndexPointer, glInterleavedArrays, glPopClientAttrib, glPushClientAttrib, glTexCoordPointer, glVertexPointer