Nächste Seite: Literatur
Aufwärts: report
Vorherige Seite: Universal Serial Bus
  Inhalt
Unterabschnitte
Die OpenGL-Implementation
Es folgt eine Beschreibung des Anzeigemoduls,
Details über dessen Implementation in OpenGL sowie der verwendeten Datenformate,
die dem Austasch zwischen Scanner-Applikation und OpenGL dienen.
Die hier benutzte OpenGL-Literatur umfaßt zum einen die OpenGL-Bücher [Cla97]
und [Woo97], welche sich bei der Arbeit als besonders nützlich
erwiesen haben. Desweiteren fand auch Literatur aus Zeitschriften
Verwendung, u.a. eine Einführung in die Programmierung mit OpenGL aus
der Zeitschrift iX [Mar00], die im Web unter [ URLiX]
verfügbar ist.
Zur Verwendung von Hilfsfunktionen, die unter OpenGL nicht direkt zur
Verfügung stehen, wurde die Bibliothek GLUT von Mark Kilgard
verwendet. Im einzelnen wurden folgende Funktionen von uns benutzt:
- Das Fenster Management hat die Aufgabe, daß OpenGL Fenster auf
die Oberfläche (X11) zu bringen. Zuvor muß das GLUT Paket
initialisiert werden und verschiedene Parameter gesetzt werden, die
direkten Einfluß auf das Verhalten und vor allem die Performance des
Programms haben. Diese Funktionen hierfür sind: glutInit,
glutInitDisplayMode, glutInitWindowSize,
glutInitWindowPosition und glutCreateWindow
- Der Anzeige Callback definiert die Funktion, die Aufgerufen
wird, wenn das Fenster neu gezeichnet werden soll. Es kann zum einen
ein vom Betriebssystem ausgelöstes Ereignis sein, was das Neuzeichnen
des Fensters erforderlich macht, und zum anderen durch das Programm selbst
erforderlich werden ( glutPostRedisplay). Die Funktion hierfür ist:
glutDisplayFunc.
- Die Ereignisschleife wird als letzter Befehl gestartet (
glutMainLoop) und kehrt nicht explizit zurück. Zuvor sind die
Funktionen glutSpecialFunc und glutSpecialFunc definiert
wurden, die bei Keyboardeingaben aufgerufen werden (vgl. Kapitel
6.3.1).
- Die Idle-Funktion ( glutidleFunc) wird für die Online-Anzeige
benötigt. Diese Funktion wird immer dann aufgerufen, wenn das
OpenGL-Programm idle ist. Diese Funktion wurde mit
der Aktualisierung des Displays verküpft. Damit nicht ständig das
Display aktualisiert wird, legt sich dieser Task explizit stets 2 Sekunden
schlafen. Dadurch wird erreicht, daß das Bild verhältnismäßig selten
aktualisiert wird und es stehen die Ressourcen für andere Programmteile
zur Verfügung.
Transformation und Rotation
Die Quellcodes für Transformation und Rotation sehen wie folgt aus:
/* do the modell-transformation */
glTranslatef (X, 0.0 , 0.0); /* translate X */
glTranslatef (0.0, Y , 0.0); /* translate Y */
glTranslatef (0.0, 0.0 , Z); /* translate Z */
glRotatef (rotX, 1.0, 0.0, 0.0); /* rotate around X-Axis */
glRotatef (rotY, 0.0, 1.0, 0.0); /* rotate around Y-Axis */
glRotatef (rotZ, 0.0, 0.0, 1.0); /* rotate around Z-Axis */
Die Funktion DrawQuads
Hier exemplarisch der Sourcecode der Funktion der Funktion
DrawQuads(). Die Zeiger Quad- Ptr,
QuadTexturePtr, QuadColorPtr sowie NumQuad, die Anzahl der zu
zeichnenden Flächen, müssen vorher entsprechend gesetzt
werden.
void DrawQuads ()
{
int i = 0, j = 0, k = 0, l = 0;
i = 0;
while (i < NumQuad * 12) {
glBegin (GL_QUADS);
for (l = 0; l < 4; l++) {
if (show_texture == 1) {
glTexCoord2f( (double)QuadTexturePtr[j+1],
(double)QuadTexturePtr[j]);
j = j + 2;
} else {
glColor3f( (double)QuadColorPtr[k++],
(double)QuadColorPtr[k++],
(double)QuadColorPtr[k++]);
}
glVertex3f( (double)QuadPtr[i++],
(double)QuadPtr[i++],
(double)QuadPtr[i++]);
}
glEnd ();
}
}
Dateiformate
Die folgenden Beispiele zeigen den prinzipiellen Aufbau von
Points.ogl und Data.ogl an einem konkreten Beispiel. Für eine
syntaktische Interpretation siehe Kapitel 6.5.3.
420
11 29 2 3.75 4.11846
8 30 1 5.3125 8.40997
...
6827 Points
9 27 -2 3.125 3.84159 0.9 0.9 0.9
...
24 Lines
-135 6 -136 -0.307904 0.116042 0.546667 0.1 0.1
-110 6 -138 -0.185688 0.115865 0.54 0.1 0.1
...
21 Surfaces
32 16 -112 0.491071 0.14338 0.1 0.626667 0.1
58 16 -113 0.633296 0.14303 0.1 0.623333 0.1
60 51 -187 0.513035 0.179337 0.1 0.376667 0.1
39 50 -184 0.444973 0.179064 0.1 0.386667 0.1
...
56 Objects
-77 49 -139 -0.033723 0.201429 0.1 0.1 0.9
-23 49 -139 0.209083 0.201429 0.1 0.1 0.9
-23 280 -139 0.209083 0.661554 0.1 0.1 0.9
-77 280 -139 -0.033723 0.661554 0.1 0.1 0.9
-77 49 -212 -0.033723 0.661554 0.1 0.1 0.9
-23 49 -212 -0.033723 0.661554 0.1 0.1 0.9
...
Nächste Seite: Literatur
Aufwärts: report
Vorherige Seite: Universal Serial Bus
  Inhalt