Durch Aufruf von Prozeduren manipuliert der Benutzer seine Daten. OpenGl verwendet dabei acht Datentypen. Der in Spalte 1 von Tabelle 24.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 |
Da OpenGl-Kommandos keine Überladung kennen, müssen für alle sinnvollen Parameterdatentypen unterschiedliche Prozedurnamen vorhanden sein.
Zum Beispiel erzeugt jeder der beiden Befehle
einen zweidimensionalen Punkt mit x-Koordinate 5 und y-Koordinate 3.glVertex2i(5,3); glVertex2f(5.0, 3.0);
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 p0,p1,p2,...,pn - 1 definiert, welche durch zwei Kommandos geklammert wird:
Hierbei ist MODUS eine der folgenden vordefinierten OpenGl-Konstanten:glBegin(MODUS); ... glEnd();
GL_POINTS | Punkte p0,p1,p2,... |
GL_LINES | Gradenstücke (p0,p1),(p2,p3),... |
GL_LINE_STRIP | Linienzug (p0,p1,p2,p3,...,pn - 1) |
GL_LINE_LOOP | geschlossener Linienzug (p0,p1,p2,p3,...,pn - 1,p0) |
GL_TRIANGLES | Dreiecke (p0,p1,p2),(p3,p4,p5),(p6,p7,p8),... |
GL_TRIANGLE_STRIP | Streifen von Dreiecken (p0,p1,p2),(p2,p1,p3),(p2,p3,p4),... |
GL_TRIANGLE_FAN | Fächer von Dreiecken (p0,p1,p2),(p0,p2,p3),(p0,p3,p4),... |
GL_QUADS | Vierecke (p0,p1,p2,p3),(p4,p5,p6,p7),(p8,p9,p10,p11),... |
GL_QUAD_STRIP | Streifen von Vierecken (p0,p1,p3,p2),(p2,p3,p5,p4),(p4,p5,p7,p6),... |
GL_POLYGON | konvexes (!) Polygon (p0,p1,p2,...,p0) |
Es existieren Stacks von 4 × 4 Matrizen zur Transformation des Modells und zur Transformation der Projektion.
Die Auswahl geschieht durch glMatrixMode(). Durch die Anweisung
bzw. durch die AnweisungglMatrixMode(GL_PROJECTION);
beziehen sich bis auf weiteres alle Matrix-Operationen auf den Projektions-Stack bzw. auf den Modell-Stack.glMatrixMode(GL_MODEL_VIEW);
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 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);