prev up inhalt next

Syntax

Durch Aufruf von Prozeduren manipuliert der Benutzer seine Daten. OpenGl verwendet dabei acht Datentypen. Der in Spalte 1 von Tabelle 21.1 genannte Suffix kündigt als letzter Buchstabe eines Kommandos den erwarteten Datentyp an.

Suffix Datentyp C-Korrespondenz OpenGl Name
b 8-bit integer signed char GLbyte
s 16-bit integer short GLshort
i 32-bit integer int GLint
f 32-bit floating point float GLfloat, GLclampf
d 64-bit floating point double GLdouble, GLclampd
ub 8-bit unsigned integer unsigned char GLubyte, GLboolean
us 16-bit unsigned integer unsigned short GLushort
ui 32-bit unsigned integer unsigned int GLuint, GLenum, GLbitfield
OpenGL Datentypen

Da OpenGl-Kommandos keine Überladung kennen, müssen für alle sinnvollen Parameterdatentypen unterschiedliche Prozedurnamen vorhanden sein. Zum Beispiel erzeugt jeder der beiden Befehle

glVertex2i(5,3);
glVertex2f(5.0, 3.0);
einen zweidimensionalen Punkt mit x-Koordinate 5 und y-Koordinate 3. Manche OpenGl-Kommandos enden mit dem Buchstaben v und signalisieren dadurch, daß sie einen Vektor als Übergabeparameter erwarten. Zum Beipiel kann das Setzen eines RGB-Farbwerts durch Angabe von drei Zahlen oder durch Angabe eines drei-elementigen Vektors geschehen:
glColor3f(1.0, 0.8, 0.8);
GLfloat farbvektor[] = {1.0, 0.8, 0.8};
glColor3fv(farbvektor);
Elementare geometrischen Figuren (wie z.B. Linien, Dreiecke, Vierecke, Polygone, etc.) werden mittels glVertex* durch eine Folge von Punkten $p_0, p_1, p_2, ..., p_{n-1}$ definiert, welche durch zwei Kommandos geklammert wird:
glBegin(MODUS);              
...
glEnd();
Hierbei ist MODUS eine der folgenden vordefinierten OpenGl-Konstanten:
GL_POINTS Punkte $p_0, p_1, p_2, ... $
GL_LINES Gradenstücke $(p_0,p_1), (p_2,p_3), ...$
GL_LINE_STRIP Linienzug $(p_0, p_1, p_2, p_3, ..., p_{n-1})$
GL_LINE_LOOP geschlossener Linienzug $(p_0, p_1, p_2, p_3, ..., p_{n-1}, p_0)$
GL_TRIANGLES Dreiecke $(p_0, p_1, p_2), (p_3, p_4, p_5), (p_6,p_7,p_8), ...$
GL_TRIANGLE_STRIP Streifen von Dreiecken $(p_0, p_1, p_2), (p_2, p_1, p3), (p_2, p_3, p_4), ...$
GL_TRIANGLE_FAN Fächer von Dreiecken $(p_0, p_1, p_2), (p_0,
p_2,p_3), (p_0, p_3,p_4), ...$
GL_QUADS Vierecke $(p_0, p_1, p_2, p_3), (p_4, p_5, p_6, p_7), (p_8,p_9,p_10,p_11), ... $
GL_QUAD_STRIP Streifen von Vierecken $(p_0,p_1,p_3,p_2),(p_2,p_3,p_5,p_4),(p_4,p_5,p_7,p_6), ...$
GL_POLYGON konvexes (!) Polygon $(p_0, p_1, p_2, ..., p_0) $
Es existieren Stacks von $4 \times 4$ Matrizen zur Transformation des Modells und zur Transformation der Projektion. Die Auswahl geschieht durch glMatrixMode(). Durch die Anweisung
glMatrixMode(GL_PROJECTION);
bzw. durch die Anweisung
glMatrixMode(GL_MODEL_VIEW);
beziehen sich bis auf weiteres alle Matrix-Operationen auf den Projektions-Stack bzw. auf den Modell-Stack. Zum Sichern und späteren Wiederherstellen der aktuellen Transformationsmatrix wird diese durch den Befehl glPushMatrix() kopiert und oben auf den Stack gelegt. Nun kann sie beliebig manipuliert werden. Ihr Originalzustand kann dann später durch glPopMatrix() wiederhergestellt werden. Multiplikation der obersten Stackmatrix mit einer beliebigen Matrix M geschieht durch Definition der Matrix und durch Aufruf der Multiplikation:
 
GLfloat M[][] = {{2.0,0.0,0.0,0.0},
                 {0.0,4.0,0.0,0.0},
                 {0.0,0.0,3.0,0.0},
                 {0.0,0.0,0.0,2.0}};
glMultMatrix(M);

prev up inhalt next