glVertexPointer: Unterschied zwischen den Versionen

Aus DGL Wiki
Wechseln zu: Navigation, Suche
K (Hinweise: glDrawArrayElement ?????)
K (Hintergrundwissen: VBO ohne glInterleavedArrays hinzugefügt)
 
(4 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
 
= glVertexPointer =
 
= glVertexPointer =
  
<br>
+
 
 +
 
 
== Name ==
 
== Name ==
  
 
'''glVertexPointer''' - Beschreibt eine Reihe von [[Eckpunkt|Vertices]].
 
'''glVertexPointer''' - Beschreibt eine Reihe von [[Eckpunkt|Vertices]].
  
<br>
+
 
 +
 
 
== 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);
 +
 
 +
 
  
<br>
 
 
== Parameter ==
 
== Parameter ==
  
<table border=1>
 
<tr>
 
<td>''size''</td>
 
<td>Gibt die Anzahl der Koordinaten pro Vertex an, muss 2,3 oder 4(Vorgabe) sein.</td>
 
</tr>
 
<tr>
 
<td>''_type''</td>
 
<td>Gibt an von welchem Datentyp die Koordinaten sind. Gültig sind '''GL_SHORT''', '''GL_INT''', '''GL_FLOAT''' (Vorgabe), und '''GL_DOUBLE'''.</td>
 
</tr>
 
<tr>
 
<td>''stride''</td>
 
<td>Byteoffset zwischen den aufeinanderfolgenden Vertices. ''stride'' = 0 (Vorgabe) bedeutet das die Vertices direkt hintereinander im Speicher liegen.</td>
 
</tr>
 
<tr>
 
<td>''_pointer''</td>
 
<td>Zeiger auf das erste Vertex der Reihe.</td>
 
</tr>
 
</table>
 
  
<br>
+
{| 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 ==  
  
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.
  
<br>
+
 
 +
 
  
 
== Hinweise ==
 
== Hinweise ==
Zeile 50: Zeile 52:
 
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.
  
<br>
+
 
 +
 
  
 
== Fehlermeldungen ==
 
== Fehlermeldungen ==
  
GL_INVALID_VALUE wird generiert wenn ''size'' <> 2,3 oder 4 ist.<br>
+
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.
  
<br>
+
 
 +
 
 
==  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'''
  
<br>
+
 
 +
 
 
== 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

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