![Page 1: Programmierpraktikum 3D Computer Grafik · Dipl.Inf. Otmar Hilliges Programmierpraktikum 3D Computer Grafik Einführung die Computergrafik: GLUT und OpenGL](https://reader030.vdokument.com/reader030/viewer/2022041123/5d2a1a5188c993d8288c72cc/html5/thumbnails/1.jpg)
Dipl.Inf. Otmar Hilliges
Programmierpraktikum 3D Computer Grafik
Einführung die Computergrafik:
GLUT und OpenGL.
![Page 2: Programmierpraktikum 3D Computer Grafik · Dipl.Inf. Otmar Hilliges Programmierpraktikum 3D Computer Grafik Einführung die Computergrafik: GLUT und OpenGL](https://reader030.vdokument.com/reader030/viewer/2022041123/5d2a1a5188c993d8288c72cc/html5/thumbnails/2.jpg)
# 213.05.20073D Programmierpraktikum SS07
Teilnehmer und Abgaben
Nachname VornameAbeldt Patrick
Brucker Horst-Egon
Dimitrova Iliana
Gebhardt Sascha
Goldhofer Sascha
Lauber Felix
Promesberger Robin
Sommer Stephan
Tevi Ulrich
![Page 3: Programmierpraktikum 3D Computer Grafik · Dipl.Inf. Otmar Hilliges Programmierpraktikum 3D Computer Grafik Einführung die Computergrafik: GLUT und OpenGL](https://reader030.vdokument.com/reader030/viewer/2022041123/5d2a1a5188c993d8288c72cc/html5/thumbnails/3.jpg)
# 313.05.20073D Programmierpraktikum SS07
Computergrafik und Toolkits
Computergrafik: Echte Welt -> gerasterte Ausgabe
Reale Szene
Modell (z.B. 3D-Modell)
Virtuelles Bild
Gerasterte Ausgabe
Modellierung & Animation
Darstellung (Projektion)
Rastern
![Page 4: Programmierpraktikum 3D Computer Grafik · Dipl.Inf. Otmar Hilliges Programmierpraktikum 3D Computer Grafik Einführung die Computergrafik: GLUT und OpenGL](https://reader030.vdokument.com/reader030/viewer/2022041123/5d2a1a5188c993d8288c72cc/html5/thumbnails/4.jpg)
# 413.05.20073D Programmierpraktikum SS07
Grafik Toolkits
Komplizierter Weg von der realen Szene zum gerasterten BildViele Arbeits(teil)stücke sind mathematisch komplex und Aufwendig (Clipping, Projektion, Culling, Rasterization)Grafikbibliotheken nehmen dem Programmierer viel Arbeit ab.Für uns sind zwei Arten von Toolkits Interessant:
• Windowing Toolkits (Fenster, Dekorationen, Menus, Eingaben)
• 3D Toolkits (Modellierung, Animation, Projektion, Rastern)
![Page 5: Programmierpraktikum 3D Computer Grafik · Dipl.Inf. Otmar Hilliges Programmierpraktikum 3D Computer Grafik Einführung die Computergrafik: GLUT und OpenGL](https://reader030.vdokument.com/reader030/viewer/2022041123/5d2a1a5188c993d8288c72cc/html5/thumbnails/5.jpg)
# 513.05.20073D Programmierpraktikum SS07
Beispiel Anwendung
![Page 6: Programmierpraktikum 3D Computer Grafik · Dipl.Inf. Otmar Hilliges Programmierpraktikum 3D Computer Grafik Einführung die Computergrafik: GLUT und OpenGL](https://reader030.vdokument.com/reader030/viewer/2022041123/5d2a1a5188c993d8288c72cc/html5/thumbnails/6.jpg)
# 613.05.20073D Programmierpraktikum SS07
Wer macht was?
Window
Drawing Canvas
OpenGL Context
GL Viewport
3D Szene
![Page 7: Programmierpraktikum 3D Computer Grafik · Dipl.Inf. Otmar Hilliges Programmierpraktikum 3D Computer Grafik Einführung die Computergrafik: GLUT und OpenGL](https://reader030.vdokument.com/reader030/viewer/2022041123/5d2a1a5188c993d8288c72cc/html5/thumbnails/7.jpg)
# 713.05.20073D Programmierpraktikum SS07
Grundlegendes
OpenGL ist eine API zur 3D Programmierung
Bietet Funktionen zum zeichnen von 3D-Szenen und Schnittstelle zur Grafik Hardware.
Keinerlei Funktionalität für Zugriff auf/von OS (Fenster, Benutzereingaben usw.)
Erweiterungen des OpenGL Standards fügen diese Funktionalitäten hinzu.
![Page 8: Programmierpraktikum 3D Computer Grafik · Dipl.Inf. Otmar Hilliges Programmierpraktikum 3D Computer Grafik Einführung die Computergrafik: GLUT und OpenGL](https://reader030.vdokument.com/reader030/viewer/2022041123/5d2a1a5188c993d8288c72cc/html5/thumbnails/8.jpg)
# 813.05.20073D Programmierpraktikum SS07
GLUT
GLUT (OpenGL Utility Toolkit) Plattform unabhängiges Windowing Toolkit.Verwaltung von Fenstern für OpenGL-AnwendungenI/O-Ereignisverarbeitung durch CallbacksBestandteil des OpenGL StandardsVerwendung von GLUT:#include <GL/glut.h>
// bindet auch GL/gl.h und GL/glu.h ein
![Page 9: Programmierpraktikum 3D Computer Grafik · Dipl.Inf. Otmar Hilliges Programmierpraktikum 3D Computer Grafik Einführung die Computergrafik: GLUT und OpenGL](https://reader030.vdokument.com/reader030/viewer/2022041123/5d2a1a5188c993d8288c72cc/html5/thumbnails/9.jpg)
3D Programmierpraktikum SS07
GLUT – Initialisierung
GLUT initialisieren:void glutInit(int* argcp, char** argv);
GLUT-Fenster initialisieren:void glutInitWindowSize(int w, int h);
void glutInitWindowPosition(int x, int y);
Displaymodus (später mehr):void glutInitDisplayMode(unsigned int mode);
Fenster erzeugen:int glutCreateWindow(char* title);
![Page 10: Programmierpraktikum 3D Computer Grafik · Dipl.Inf. Otmar Hilliges Programmierpraktikum 3D Computer Grafik Einführung die Computergrafik: GLUT und OpenGL](https://reader030.vdokument.com/reader030/viewer/2022041123/5d2a1a5188c993d8288c72cc/html5/thumbnails/10.jpg)
3D Programmierpraktikum SS07
GLUT – Initialisierung
Fenster zerstören:void glutDestroyWindow(int window);
Fenster neu zeichnen:void glutPostRedisplay();
Bildschirmspeicher wechseln:void glutSwapBuffers();
• GLUT zeichnet im Displaymodus DOUBLE jeweils in den Hintergrund-Buffer
• Am Ende des Zeichnens wird der aktuell dargestellte Buffer und der
Hintergrund-Buffer gewechselt
![Page 11: Programmierpraktikum 3D Computer Grafik · Dipl.Inf. Otmar Hilliges Programmierpraktikum 3D Computer Grafik Einführung die Computergrafik: GLUT und OpenGL](https://reader030.vdokument.com/reader030/viewer/2022041123/5d2a1a5188c993d8288c72cc/html5/thumbnails/11.jpg)
3D Programmierpraktikum SS07
GLUT – Callback-Funktionen
GLUT verwendet einige Callback-Funktionen, die durch Ereignisse aufgerufen werdenIdle Callback:
• Wird aufgerufen, wenn keine anderen Events aufgetreten sind Zeichnet
meistens die Szene neu
void glutIdleFunc(void (*func)(void));
![Page 12: Programmierpraktikum 3D Computer Grafik · Dipl.Inf. Otmar Hilliges Programmierpraktikum 3D Computer Grafik Einführung die Computergrafik: GLUT und OpenGL](https://reader030.vdokument.com/reader030/viewer/2022041123/5d2a1a5188c993d8288c72cc/html5/thumbnails/12.jpg)
3D Programmierpraktikum SS07
GLUT – Callback-Funktionen
Display Callback:• Wird aufgerufen, wenn das aktuelle Fenster neu gezeichnet werden muss
void glutDisplayFunc(void (*func)(void));
Reshape Callback:• Wird aufgerufen, wenn sich die Größe des aktuellen Fensters verändert
void glutReshapeFunc(void (*func)(int w, int h));
![Page 13: Programmierpraktikum 3D Computer Grafik · Dipl.Inf. Otmar Hilliges Programmierpraktikum 3D Computer Grafik Einführung die Computergrafik: GLUT und OpenGL](https://reader030.vdokument.com/reader030/viewer/2022041123/5d2a1a5188c993d8288c72cc/html5/thumbnails/13.jpg)
3D Programmierpraktikum SS07
GLUT – Callback-Funktionen
Keyboard Callback:• Wird aufgerufen, wenn eine Standard-Taste (keine F-Tasten o.ä.) gedrückt
wurde
void glutKeyboardFunc(void (*func)
(unsigned char key, int x, int y));
Special Callback:• Wird aufgerufen, wenn eine Sondertaste gedrückt wurde
void glutSpecialFunc(void (*func)
(int key, int x, int y));
![Page 14: Programmierpraktikum 3D Computer Grafik · Dipl.Inf. Otmar Hilliges Programmierpraktikum 3D Computer Grafik Einführung die Computergrafik: GLUT und OpenGL](https://reader030.vdokument.com/reader030/viewer/2022041123/5d2a1a5188c993d8288c72cc/html5/thumbnails/14.jpg)
3D Programmierpraktikum SS07
GLUT – Callback-Funktionen
Mouse Callback:• Wird aufgerufen, wenn eine Maus-Taste gedrückt wurde
void glutMouseFunc(void (*func)
(int button, int state, int x, int y));
Motion Callback:• Wird aufgerufen, wenn die Maus bei gedrückter Maustaste bewegt wurde
void glutSpecialFunc(void (*func)
(int x, int y));
![Page 15: Programmierpraktikum 3D Computer Grafik · Dipl.Inf. Otmar Hilliges Programmierpraktikum 3D Computer Grafik Einführung die Computergrafik: GLUT und OpenGL](https://reader030.vdokument.com/reader030/viewer/2022041123/5d2a1a5188c993d8288c72cc/html5/thumbnails/15.jpg)
3D Programmierpraktikum SS07
GLUT – Callback-Funktionen
Passive Motion Callback:• Wird aufgerufen, wenn die Maus ohne gedrückte Maustaste bewegt wurde
void glutPassiveMotionFunc(void (*func)
(int x, int y));
Starten der Ereignisverarbeitung:• Wird nach der Initialisierung von GLUT und OpenGL aufgerufen und startet
eine Endlosschleife
void glutMainLoop(void);
![Page 16: Programmierpraktikum 3D Computer Grafik · Dipl.Inf. Otmar Hilliges Programmierpraktikum 3D Computer Grafik Einführung die Computergrafik: GLUT und OpenGL](https://reader030.vdokument.com/reader030/viewer/2022041123/5d2a1a5188c993d8288c72cc/html5/thumbnails/16.jpg)
3D Programmierpraktikum SS07
GLUT – Callback-Funktionen
Beispiel:void display(void) {
// some OpenGL drawing}
int main(int argc, char** argv) {glutInit(&argc, argv);…glutDisplayFunc(display);…glutMainLoop();return 0;
}
![Page 17: Programmierpraktikum 3D Computer Grafik · Dipl.Inf. Otmar Hilliges Programmierpraktikum 3D Computer Grafik Einführung die Computergrafik: GLUT und OpenGL](https://reader030.vdokument.com/reader030/viewer/2022041123/5d2a1a5188c993d8288c72cc/html5/thumbnails/17.jpg)
3D Programmierpraktikum SS07
GLUT – Displaymodi
GLUT unterstützt verschiedene OpenGL-ModiMögliche Modi:GLUT_RGBA // RGBA mode windowGLUT_SINGLE // Single bufferingGLUT_DOUBLE // Double bufferingGLUT_ALPHA // Window has alpha componentsGLUT_DEPTH // Window with depth buffer
Beispiel:glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH);
![Page 18: Programmierpraktikum 3D Computer Grafik · Dipl.Inf. Otmar Hilliges Programmierpraktikum 3D Computer Grafik Einführung die Computergrafik: GLUT und OpenGL](https://reader030.vdokument.com/reader030/viewer/2022041123/5d2a1a5188c993d8288c72cc/html5/thumbnails/18.jpg)
3D Programmierpraktikum SS07
GLUT – Vollbildmodus
Zwei Möglichkeiten, den Vollbildmodus zu aktivieren(Beispiele):
• Direkt bei der Erzeugung des Fensters:
glutGameModeString(“640x480:16@60”);
glutEnterGameMode();
• Während der Ausführung:
// normal to fullscreen
glutFullscreen();
// fullscreen to normal
glutReshapeWindow(640, 480);
glutPositionWindow(100, 100);
![Page 19: Programmierpraktikum 3D Computer Grafik · Dipl.Inf. Otmar Hilliges Programmierpraktikum 3D Computer Grafik Einführung die Computergrafik: GLUT und OpenGL](https://reader030.vdokument.com/reader030/viewer/2022041123/5d2a1a5188c993d8288c72cc/html5/thumbnails/19.jpg)
3D Programmierpraktikum SS07
OpenGL
OpenGL
![Page 20: Programmierpraktikum 3D Computer Grafik · Dipl.Inf. Otmar Hilliges Programmierpraktikum 3D Computer Grafik Einführung die Computergrafik: GLUT und OpenGL](https://reader030.vdokument.com/reader030/viewer/2022041123/5d2a1a5188c993d8288c72cc/html5/thumbnails/20.jpg)
# 2013.05.20073D Programmierpraktikum SS07
OpenGL Viewing
OpenGL ist eine State-Machine die das Zeichnen von 3D-Szenen und Animationen erlaubt
Grafik Primitive werden zusammen gesetzt und manipuliert (Status Änderungen)
Primitive:• Punkte
• Linien
• Polygone
• Bitmaps
Außerdem werden Lichtquellen und Kamera positioniert
Anschließend wird die Szene ausgegeben
Das ganze findet in einer Endlosschleife statt
![Page 21: Programmierpraktikum 3D Computer Grafik · Dipl.Inf. Otmar Hilliges Programmierpraktikum 3D Computer Grafik Einführung die Computergrafik: GLUT und OpenGL](https://reader030.vdokument.com/reader030/viewer/2022041123/5d2a1a5188c993d8288c72cc/html5/thumbnails/21.jpg)
# 2113.05.20073D Programmierpraktikum SS07
OpenGL Pipeline
1. Objekte im Raum anordnen und ausrichten (ModellingTransformations)
2. Kamera positionieren (Viewing Transformations)1. Defaultposition (0,0,1)
3. Ausschnitt aus der „Welt“ wählen (Viewing Volume)
4. Inhalt des Viewing Volumes in 2D-Ebene Projizieren (Projection Transformations)
5. Ausgabe des Resultats auf dem Bildschirm (ViewportTransformations)
ModelviewMatrixM
ProjectionMatrixP
PerspectiveDevisionD
ViewportTransformV
Object coordinates Device coordinates
![Page 22: Programmierpraktikum 3D Computer Grafik · Dipl.Inf. Otmar Hilliges Programmierpraktikum 3D Computer Grafik Einführung die Computergrafik: GLUT und OpenGL](https://reader030.vdokument.com/reader030/viewer/2022041123/5d2a1a5188c993d8288c72cc/html5/thumbnails/22.jpg)
3D Programmierpraktikum SS07
OpenGL – 2D-Objekte
Alle 2D-Objekte liegen im Raum in einer Ebene und bestehen aus einer Menge von PunktenMögliche 2D-Objekte:
• Points (1D)
• Lines (2D)
• Line Strips (2D) Verkettete Linien
• Line Loops (2D) geschlossener Linienzug
• Polygons (2D) geschlossener, gefüllter Linienzug
![Page 23: Programmierpraktikum 3D Computer Grafik · Dipl.Inf. Otmar Hilliges Programmierpraktikum 3D Computer Grafik Einführung die Computergrafik: GLUT und OpenGL](https://reader030.vdokument.com/reader030/viewer/2022041123/5d2a1a5188c993d8288c72cc/html5/thumbnails/23.jpg)
3D Programmierpraktikum SS07
OpenGL – 2D-Objekte
Beispiel:glBegin(GL_POLYGON);
glColor3f(1.0f, 0.0f, 0.0f); // redglVertex3f(-1.0f, -1.0f, 0.0f);glVertex3f(1.0f, -1.0f, 0.0f);glColor3f(0.0f, 0.0f, 1.0f); // blueglVertex3f(1.0f, 1.0f, 0.0f);glVertex3f(-1.0f, 1.0f, 0.0f);
glEnd();
Weitere Formen:GL_POINTS, GL_LINES (je 2 Punkte verbunden)GL_LINE_STRIP, GL_LINE_LOOPGL_POLYGON, GL_QUADS, GL_TRIANGLES
![Page 24: Programmierpraktikum 3D Computer Grafik · Dipl.Inf. Otmar Hilliges Programmierpraktikum 3D Computer Grafik Einführung die Computergrafik: GLUT und OpenGL](https://reader030.vdokument.com/reader030/viewer/2022041123/5d2a1a5188c993d8288c72cc/html5/thumbnails/24.jpg)
3D Programmierpraktikum SS07
OpenGL – 2D-Objekte
Beispiele:
GL_POINTS GL_LINES GL_LINE_STRIP
GL_LINE_LOOP GL_QUADS GL_POLYGON
![Page 25: Programmierpraktikum 3D Computer Grafik · Dipl.Inf. Otmar Hilliges Programmierpraktikum 3D Computer Grafik Einführung die Computergrafik: GLUT und OpenGL](https://reader030.vdokument.com/reader030/viewer/2022041123/5d2a1a5188c993d8288c72cc/html5/thumbnails/25.jpg)
3D Programmierpraktikum SS07
OpenGL – 3D-Objekte
Werden aus 2D-Objekten erstelltVertices einer Fläche unterscheiden sich in allen dreiKoordinatenBeispiel:
• Würfel aus 6 Quadraten
• Würfel aus 12 Dreiecken
• Kugel aus n Dreiecken
• Tetraeder aus 4 Dreiecken
• …
![Page 26: Programmierpraktikum 3D Computer Grafik · Dipl.Inf. Otmar Hilliges Programmierpraktikum 3D Computer Grafik Einführung die Computergrafik: GLUT und OpenGL](https://reader030.vdokument.com/reader030/viewer/2022041123/5d2a1a5188c993d8288c72cc/html5/thumbnails/26.jpg)
3D Programmierpraktikum SS07
OpenGL – Grundlegende Transform.
Die Einheitsmatrix:glLoadIdentity();
• Lädt die Einhaitsmatrix (um
Speicher zu initialisieren)
Die Translation:glTranslatef(x, y, z);
glTranslated(x, y, z);
• Verschiebt den Ursprung an die
neue Position
⎟⎟⎟⎟⎟
⎠
⎞
⎜⎜⎜⎜⎜
⎝
⎛
1000010000100001
⎟⎟⎟⎟⎟
⎠
⎞
⎜⎜⎜⎜⎜
⎝
⎛
1000100010001
zyx
![Page 27: Programmierpraktikum 3D Computer Grafik · Dipl.Inf. Otmar Hilliges Programmierpraktikum 3D Computer Grafik Einführung die Computergrafik: GLUT und OpenGL](https://reader030.vdokument.com/reader030/viewer/2022041123/5d2a1a5188c993d8288c72cc/html5/thumbnails/27.jpg)
3D Programmierpraktikum SS07
OpenGL – Grundlegende Transform.
Die Rotation:glRotatef(a, x, y, z);
glRotated(a, x, y, z);
• Rotiert den Ursprung um den Vektor
(x, y, z) entgegen dem
Uhrzeigersinn ⎟⎟⎟⎟⎟
⎠
⎞
⎜⎜⎜⎜⎜
⎝
⎛−
10000cossin00sincos00001
αααα
glRotate*(α, 1, 0, 0);
⎟⎟⎟⎟⎟
⎠
⎞
⎜⎜⎜⎜⎜
⎝
⎛
−10000cos0sin00100sin0cos
αα
αα
⎟⎟⎟⎟⎟
⎠
⎞
⎜⎜⎜⎜⎜
⎝
⎛ −
1000010000cossin00sincos
αααα
glRotate*(α, 0, 1, 0);glRotate*(α, 0, 0, 1);
![Page 28: Programmierpraktikum 3D Computer Grafik · Dipl.Inf. Otmar Hilliges Programmierpraktikum 3D Computer Grafik Einführung die Computergrafik: GLUT und OpenGL](https://reader030.vdokument.com/reader030/viewer/2022041123/5d2a1a5188c993d8288c72cc/html5/thumbnails/28.jpg)
3D Programmierpraktikum SS07
OpenGL – Zeichnungsablauf
Zunächst Löschen der Puffer:glClear(GL_COLOR_BUFFER_BIT |
GL_DEPTH_BUFFER_BIT);
Vor dem Zeichnen: Transformation des zuzeichnenden Objektes:
glLoadIdentity(); // Laden der EinheitsmatrixglTranslatef(GLfloat x, GLfloat y, GLfloat z);glRotatef(GLfloat angle, GLfloat x, GLfloat y,
GLfloat z);
Nach dem Zeichnen der Objekte: Wechsel des Puffers
glutSwapBuffers();
![Page 29: Programmierpraktikum 3D Computer Grafik · Dipl.Inf. Otmar Hilliges Programmierpraktikum 3D Computer Grafik Einführung die Computergrafik: GLUT und OpenGL](https://reader030.vdokument.com/reader030/viewer/2022041123/5d2a1a5188c993d8288c72cc/html5/thumbnails/29.jpg)
# 2913.05.20073D Programmierpraktikum SS07
Literatur
OpenGL Reference Page: http://www.mevis.de/opengl/opengl.html
GLUT Man Pages:http://www.cs.uccs.edu/~semwal/man.html