glVertexPointer: Unterschied zwischen den Versionen
(→Beschreibung) |
K (Hintergrundwissen: VBO ohne glInterleavedArrays hinzugefügt) |
||
(6 dazwischenliegende Versionen von 5 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
= glVertexPointer = | = glVertexPointer = | ||
− | + | ||
+ | |||
== Name == | == Name == | ||
'''glVertexPointer''' - Beschreibt eine Reihe von [[Eckpunkt|Vertices]]. | '''glVertexPointer''' - Beschreibt eine Reihe von [[Eckpunkt|Vertices]]. | ||
− | + | ||
+ | |||
== Delphi-Spezifikation == | == Delphi-Spezifikation == | ||
− | procedure '''glVertexPointer'''(''size'' : TGLint; ''_type'' : TGLenum; ''stride'' : TGLsizei; const ''_pointer'' : PGLvoid); | + | procedure '''glVertexPointer'''(''size'' : TGLint; ''_type'' : TGLenum; ''stride'' : TGLsizei; const ''_pointer'' : PGLvoid); |
+ | |||
+ | |||
− | |||
== Parameter == | == Parameter == | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | {| border="1" rules="all" | |
+ | ! ''size'' | ||
+ | | Gibt die Anzahl der Koordinaten pro Vertex an, muss 2,3 oder 4(Vorgabe) sein. | ||
+ | |- | ||
+ | ! ''_type'' | ||
+ | | Gibt an von welchem Datentyp die Koordinaten sind. Gültig sind '''GL_SHORT''', '''GL_INT''', '''GL_FLOAT''' (Vorgabe), und '''GL_DOUBLE'''. | ||
+ | |- | ||
+ | ! ''stride'' | ||
+ | | Byteoffset zwischen den aufeinanderfolgenden Vertices. ''stride'' = 0 (Vorgabe) bedeutet das die Vertices direkt hintereinander im Speicher liegen. | ||
+ | |- | ||
+ | ! ''_pointer'' | ||
+ | | Zeiger auf das erste Vertex der Reihe. (ODER: Byteoffset zwischen Startadresse des VBOs und des ersten Vertex, wenn ein VBO gebunden ist) | ||
+ | |} | ||
+ | |||
+ | |||
+ | |||
+ | |||
== Beschreibung == | == Beschreibung == | ||
− | '''glVertexPointer''' beschreibt Lage und das Datenformat einer Reihe (Array) von Vertex-Koordinaten die später zum Rendern benutzt werden sollen. ''size'' gibt an wie viele Koordinaten dabei ein Vertex besitzt, während ''type'' die GL darüber informiert von welchem Datentyp diese | + | '''glVertexPointer''' beschreibt Lage und das Datenformat einer Reihe (Array) von Vertex-Koordinaten die später zum Rendern benutzt werden sollen. ''size'' gibt an wie viele Koordinaten dabei ein Vertex besitzt, während ''type'' die GL darüber informiert von welchem Datentyp diese sind. ''stride'' gibt zusätzlich noch an wie groß der "Leerraum" zwischen zwei aufeinanderfolgenden Vertices ist (z.B. wenn man eine Vertexstruktur hat in der nicht nur die Koordinaten gespeichert sind). Wenn die Vertex-Reihe mit diesem Befehl beschrieben wird, werden alle übergebenen Parameter auf der Client-Seite gespeichert. |
Um Vertex-Reihen zu aktivieren bzw. zu deaktivieren, ruft man [[glEnableClientState]] bzw. [[glDisableClientState]] mit dem Token GL_VERTEX_ARRAY auf. Wurden diese aktiviert, so können diese mit [[glDrawArrays]], [[glDrawElements]] oder [[glArrayElement]] gerendert werden. | Um Vertex-Reihen zu aktivieren bzw. zu deaktivieren, ruft man [[glEnableClientState]] bzw. [[glDisableClientState]] mit dem Token GL_VERTEX_ARRAY auf. Wurden diese aktiviert, so können diese mit [[glDrawArrays]], [[glDrawElements]] oder [[glArrayElement]] gerendert werden. | ||
Zeile 42: | Zeile 43: | ||
[[glDrawArrays]] nutzt man dann um eine Sequenz von Primitiven (gleichen Typs) aus den übergebenen Vertex-Daten und Vertex-Attributen zu rendern, [[glArrayElement]] um Primitiven per Indizes zu rendern und [[glDrawElements]] um per Index indiziert eine Sequenz von Primitiven zu konstruieren. | [[glDrawArrays]] nutzt man dann um eine Sequenz von Primitiven (gleichen Typs) aus den übergebenen Vertex-Daten und Vertex-Attributen zu rendern, [[glArrayElement]] um Primitiven per Indizes zu rendern und [[glDrawElements]] um per Index indiziert eine Sequenz von Primitiven zu konstruieren. | ||
− | + | ||
+ | |||
== Hinweise == | == Hinweise == | ||
− | '''glVertexPointer''' ist ab '''OpenGL 1.1''' verfügbar, typischerweise als Client-Status implementiert (d.h. das diese nicht per glPush-/glPopAttrib gesichert werden können, sondern nur via glPush-/glPopClientAttrib), und Vertex-Reihen sind per Vorgabe deaktiviert (also nicht per [[ | + | '''glVertexPointer''' ist ab '''OpenGL 1.1''' verfügbar, typischerweise als Client-Status implementiert (d.h. das diese nicht per glPush-/glPopAttrib gesichert werden können, sondern nur via glPush-/glPopClientAttrib), und Vertex-Reihen sind per Vorgabe deaktiviert (also nicht per [[glArrayElement]], [[glDrawElements]] oder [[glDrawArrays]] aufrufbar). |
Ein Aufruf von '''glVertexPointer''' zwischen einem [[glBegin]] und dem zugehörigen [[glEnd]] ist nicht erlaubt, allerdings muss (je nach Implementation) dann nicht unbedingt eine Fehlermeldung generiert werden. | Ein Aufruf von '''glVertexPointer''' zwischen einem [[glBegin]] und dem zugehörigen [[glEnd]] ist nicht erlaubt, allerdings muss (je nach Implementation) dann nicht unbedingt eine Fehlermeldung generiert werden. | ||
− | + | ||
+ | |||
== Fehlermeldungen == | == Fehlermeldungen == | ||
− | GL_INVALID_VALUE wird generiert wenn ''size'' | + | GL_INVALID_VALUE wird generiert wenn ''size'' weder 2, 3 noch 4 ist.<br> |
GL_INVALID_ENUM wenn ''_type'' keine gültige Konstante beinhaltet.<br> | GL_INVALID_ENUM wenn ''_type'' keine gültige Konstante beinhaltet.<br> | ||
Zeile 60: | Zeile 63: | ||
GL_INVALID_VALUE wenn ''stride'' negativ ist. | GL_INVALID_VALUE wenn ''stride'' negativ ist. | ||
− | + | ||
+ | |||
== Zugehörige Wertrückgaben == | == Zugehörige Wertrückgaben == | ||
Zeile 69: | Zeile 73: | ||
[[glGetPointerv]] mit dem Token '''GL_VERTEX_ARRAY_POINTER''' | [[glGetPointerv]] mit dem Token '''GL_VERTEX_ARRAY_POINTER''' | ||
− | + | ||
+ | |||
== Siehe auch == | == Siehe auch == | ||
+ | |||
+ | Hintergrundwissen: [[VBO ohne glInterleavedArrays]] | ||
[[glArrayElement]], [[glColorPointer]], [[glDrawArrays]], [[glDrawElements]], [[glEdgeFlagPointer]], [[glEnable]], [[glGetPointerv]], [[glIndexPointer]], [[glInterleavedArrays]], [[glNormalPointer]], [[glPopClientAttrib]], [[glPushClientAttrib]], [[glTexCoordPointer]] | [[glArrayElement]], [[glColorPointer]], [[glDrawArrays]], [[glDrawElements]], [[glEdgeFlagPointer]], [[glEnable]], [[glGetPointerv]], [[glIndexPointer]], [[glInterleavedArrays]], [[glNormalPointer]], [[glPopClientAttrib]], [[glPushClientAttrib]], [[glTexCoordPointer]] | ||
[[Kategorie:GL|VertexPointer]] | [[Kategorie:GL|VertexPointer]] |
Aktuelle Version vom 19. Mai 2010, 10:46 Uhr
Inhaltsverzeichnis
glVertexPointer
Name
glVertexPointer - Beschreibt eine Reihe von Vertices.
Delphi-Spezifikation
procedure glVertexPointer(size : TGLint; _type : TGLenum; stride : TGLsizei; const _pointer : PGLvoid);
Parameter
size | Gibt die Anzahl der Koordinaten pro Vertex an, muss 2,3 oder 4(Vorgabe) sein. |
---|---|
_type | Gibt an von welchem Datentyp die Koordinaten sind. Gültig sind GL_SHORT, GL_INT, GL_FLOAT (Vorgabe), und GL_DOUBLE. |
stride | Byteoffset zwischen den aufeinanderfolgenden Vertices. stride = 0 (Vorgabe) bedeutet das die Vertices direkt hintereinander im Speicher liegen. |
_pointer | Zeiger auf das erste Vertex der Reihe. (ODER: Byteoffset zwischen Startadresse des VBOs und des ersten Vertex, wenn ein VBO gebunden ist) |
Beschreibung
glVertexPointer beschreibt Lage und das Datenformat einer Reihe (Array) von Vertex-Koordinaten die später zum Rendern benutzt werden sollen. size gibt an wie viele Koordinaten dabei ein Vertex besitzt, während type die GL darüber informiert von welchem Datentyp diese sind. stride gibt zusätzlich noch an wie groß der "Leerraum" zwischen zwei aufeinanderfolgenden Vertices ist (z.B. wenn man eine Vertexstruktur hat in der nicht nur die Koordinaten gespeichert sind). Wenn die Vertex-Reihe mit diesem Befehl beschrieben wird, werden alle übergebenen Parameter auf der Client-Seite gespeichert.
Um Vertex-Reihen zu aktivieren bzw. zu deaktivieren, ruft man glEnableClientState bzw. glDisableClientState mit dem Token GL_VERTEX_ARRAY auf. Wurden diese aktiviert, so können diese mit glDrawArrays, glDrawElements oder glArrayElement gerendert werden.
glDrawArrays nutzt man dann um eine Sequenz von Primitiven (gleichen Typs) aus den übergebenen Vertex-Daten und Vertex-Attributen zu rendern, glArrayElement um Primitiven per Indizes zu rendern und glDrawElements um per Index indiziert eine Sequenz von Primitiven zu konstruieren.
Hinweise
glVertexPointer ist ab OpenGL 1.1 verfügbar, typischerweise als Client-Status implementiert (d.h. das diese nicht per glPush-/glPopAttrib gesichert werden können, sondern nur via glPush-/glPopClientAttrib), und Vertex-Reihen sind per Vorgabe deaktiviert (also nicht per glArrayElement, glDrawElements oder glDrawArrays aufrufbar).
Ein Aufruf von glVertexPointer zwischen einem glBegin und dem zugehörigen glEnd ist nicht erlaubt, allerdings muss (je nach Implementation) dann nicht unbedingt eine Fehlermeldung generiert werden.
Fehlermeldungen
GL_INVALID_VALUE wird generiert wenn size weder 2, 3 noch 4 ist.
GL_INVALID_ENUM wenn _type keine gültige Konstante beinhaltet.
GL_INVALID_VALUE wenn stride negativ ist.
Zugehörige Wertrückgaben
glIsEnabled mit dem Token GL_VERTEX_ARRAY
glGet mit dem Token GL_VERTEX_ARRAY_SIZE
glGet mit dem Token GL_VERTEX_ARRAY_TYPE
glGet mit dem Token GL_VERTEX_ARRAY_STRIDE
glGetPointerv mit dem Token GL_VERTEX_ARRAY_POINTER
Siehe auch
Hintergrundwissen: VBO ohne glInterleavedArrays
glArrayElement, glColorPointer, glDrawArrays, glDrawElements, glEdgeFlagPointer, glEnable, glGetPointerv, glIndexPointer, glInterleavedArrays, glNormalPointer, glPopClientAttrib, glPushClientAttrib, glTexCoordPointer