Grafische Datenverarbeitung

3 Software Grafischer Datensysteme

 

*Schichten Architektur
*Die Funktionsweise von OpenGL (Zustandsautomat, Eigenschaften und Konzepte)

OpenGL - Einführung

Datentypen
OpenGL definiert eigene Datentypen.
Dies führt zu besserer Portabilität. Im allgemeinen werden alle Daten intern in einem bestimmten, bei den Aufrufen genauer spezifizierten Format gespeichert.
OpenGL definiert zwei Datentypen GLClampf und GLClampd für Fließkommaparameter und –variablen, die vor der eigentlichen Auswertung innerhalb eines OpenGL-Aufrufes auf bestimmte Wertebereiche begrenzt (engl. to clamp) werden.
Die Datentypen von OpenGL sowie deren Kürzel und Entsprechung in ANSI C sind in der folgenden Tabelle zusammengestellt:
 Kürzel Datentyp ANSI C OpenGL
b
s
i
f
d
ub
us
ui
-

8 Bit Integer mit Vz.
16 Bit Integer mit Vz
32 Bit Integer mit Vz
32 Bit Fließkomma
64 Bit Fließkomma
8 Bit Integer ohne Vz
16 Bit Integer ohne Vz
32 Bit Integer ohne Vz
(unbestimmt)

signed char
short
int oder long
float
double
unsigned char
unsigned short
unsigned int oder unsigned long
void

GLbyte
GLshort
GLint, GLsizei
GLfloat, GLclampf
GLdouble, GLclampd
GLubyte, GLboolean
GLushort
GLuint, GLenum, GLbitfield
GLvoid

Konstanten
-Konstanten werden durchweg groß geschrieben.
-Konstanten beginnen immer mit GL_.
-Der Unterstrich _ wird zur Trennung einzelner
Wortbestandteile genutzt.
Es gibt Konstanten verschiedenen Typs, z.B.
- GL_TRUE und GL_FALSE vom Typ GLboolean
- GL_FRONT und GL_BACK vom Typ GLenum
- GL_COLOR_BUFFER_BIT vom Typ GLbitfield

Befehle
Alle Aufrufe von OpenGL-Funktionen beginnen mit gl.
Aufrufe von Funktionen aus GLU beginnen mit glu.
Wortbestandteile beginnen mit Großbuchstaben, ansonsten werden Kleinbuchstaben verwendet, z.B. glClearColor()

Varianten von Befehlen
Die meisten OpenGL-Aufrufe existieren in mehreren Varianten:
die Datentypen der Eingabeparameter können unterschiedlich gewählt werden
Viele Befehle existieren in einer vektoriellen und einer nichtvektoriellen Form
 Konvention:
  Die Anzahl bestimmter Parameter wird angegeben.
  Der Typ der Eingabeparameter wird durch Anhängen des Kürzels aus der obigen Tabelle an den Befehlsnamen angegeben
  Die vektorielle Form wird zusätzlich mit einem v gekennzeichnet.

Beispiel:
Definition der Darstellungsfarbe rot durch 8 Bit Integer ohne Vorzeichen in nicht-vektorieller Form
glColor3ub(255,0,0);
Definition der Darstellungsfarbe rot durch Fließkommazahlen in vektorieller Form
Glfloat colors[] = {1.0,0.0,0.0};
glColor3fv(colors);


Beispiel
void draw(){
// Schwarzer Hintergrund
 glClearColor(0.0,0.0,0.0,0.0);
 glClear(GL_COLOR_BUFFER_BIT);
// Weißes Quadrat
 glColor3f(1.0,1.0,1.0);
 gluOrtho2d(0.0,1.0,0.0,1.0);
 glBegin(GL_POLYGON);
 glVertex2f(0.25,0.25);
 glVertex2f(0.75,0.25);
 glVertex2f(0.75,0.75);
 glVertex2f(0.25,0.75);
 glEnd();
}