proseminar computergrafik: opengl
DESCRIPTION
Proseminar Computergrafik: OpenGL. Marcel Heckel 23.05.2006. 1. Allgemein Was ist OpenGL Geschichte 2. Etwas 3D-Mathematik Das Koordinatensystem Vektoren Matrizen 3. Grundlegendes zu OpenGL Arbeitsweise Vertices und Primitiven Bibliotheken - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: Proseminar Computergrafik: OpenGL](https://reader036.vdocuments.site/reader036/viewer/2022081421/568148e8550346895db602c6/html5/thumbnails/1.jpg)
Proseminar Computergrafik:OpenGL
Marcel Heckel
23.05.2006
![Page 2: Proseminar Computergrafik: OpenGL](https://reader036.vdocuments.site/reader036/viewer/2022081421/568148e8550346895db602c6/html5/thumbnails/2.jpg)
23.05.2006 - Proseminar Computergrafik: OpenGL Marcel Heckel 2 / 38
0. Inhalt1. Allgemein
Was ist OpenGLGeschichte
2. Etwas 3D-MathematikDas KoordinatensystemVektorenMatrizen
3. Grundlegendes zu OpenGLArbeitsweiseVertices und PrimitivenBibliothekenFunktionsbezeichnungen und DatentypenGLUT-Beispiel
4. ZeichenPrimitiven zeichnenDas ganze mit etwas FarbeVertex-BehandlungTests vor dem Schreiben in den PufferWichtige Funktionen
5. LichtSinn von LichtLichtartenLicht und NormalenLicht aktivieren
6. TexturenSinn von TexturenAllgemeinTexturkoordinaten und WiederholungFilterMip-MapsTexturen definieren
![Page 3: Proseminar Computergrafik: OpenGL](https://reader036.vdocuments.site/reader036/viewer/2022081421/568148e8550346895db602c6/html5/thumbnails/3.jpg)
23.05.2006 - Proseminar Computergrafik: OpenGL Marcel Heckel 3 / 38
1. Allgemein
Was ist OpenGL?• OpenGL steht für Open Graphics Library • geräte- und betriebssystemunabhängige Bibliothek für
qualitative 2D und 3D Grafiken und grafisches Rendering
• von Silicon Graphics Inc. (SGI) entwickelt • Ursprünglich OpenGL für den Einsatz auf hochwertigen
grafischen Workstations • Heute weit verbreiteten Standard vieler
Betriebssysteme • von allen modernen Grafikkarten unterstützt• zweithäufigste genutzte Software-Schnittstelle (nach
Direct3D)
![Page 4: Proseminar Computergrafik: OpenGL](https://reader036.vdocuments.site/reader036/viewer/2022081421/568148e8550346895db602c6/html5/thumbnails/4.jpg)
23.05.2006 - Proseminar Computergrafik: OpenGL Marcel Heckel 4 / 38
1. Allgemein
Geschichte
• Entstand aus IRIS GL (SGI)
• 1992 OpenGL-Standard von ARB (Architecture Review Board) definiert
• ARB Mitglieder (u.a.): Apple, ATI, Dell, IBM, Intel, NVidia, SGI, Sun
• Microsoft (Gründungsmitglied) verlies ARB 2003
![Page 5: Proseminar Computergrafik: OpenGL](https://reader036.vdocuments.site/reader036/viewer/2022081421/568148e8550346895db602c6/html5/thumbnails/5.jpg)
23.05.2006 - Proseminar Computergrafik: OpenGL Marcel Heckel 5 / 38
1. Allgemein
GeschichteVersionsfolge:• 1. Juli 1992: OpenGL 1.0• 1997 OpenGL 1.1• 16. März 1998: OpenGL 1.2• 14. Oktober 1998: OpenGL 1.2.1• 14. August 2001: OpenGL 1.3• 24. Juli 2002: OpenGL 1.4• 29. Juli 2003: OpenGL 1.5• 7. September 2004: OpenGL 2.0
![Page 6: Proseminar Computergrafik: OpenGL](https://reader036.vdocuments.site/reader036/viewer/2022081421/568148e8550346895db602c6/html5/thumbnails/6.jpg)
23.05.2006 - Proseminar Computergrafik: OpenGL Marcel Heckel 6 / 38
2. Etwas 3D-Mathematik
Das Koordinatensystem
• KartesischesKoordinatensystem
• x-Achse: untererBildschirm-Rand
• y-Achse: linkerBildschirm-Rand
• in den Monitor blickt man entlang der negativen z-Achse
![Page 7: Proseminar Computergrafik: OpenGL](https://reader036.vdocuments.site/reader036/viewer/2022081421/568148e8550346895db602c6/html5/thumbnails/7.jpg)
23.05.2006 - Proseminar Computergrafik: OpenGL Marcel Heckel 7 / 38
2. Etwas 3D-Mathematik
Vektoren
• Länge ein Vektors: |v|=
• Einheitsvektor: v‘ = v / |v|
• (Punkt-/)Skalarprodukt:v • u = v.x · u.x + v.y · u.y + v.z · u.z
= cos a · |v|·|u|
• Kreutzprodukt:v = u × w = ( u.y · w.z - u.z · w.y ; u.z · w.x - u.x · w.z ; u.x · w.y - u.y · w.x)
².².². zvyvxv
![Page 8: Proseminar Computergrafik: OpenGL](https://reader036.vdocuments.site/reader036/viewer/2022081421/568148e8550346895db602c6/html5/thumbnails/8.jpg)
23.05.2006 - Proseminar Computergrafik: OpenGL Marcel Heckel 8 / 38
2. Etwas 3D-Mathematik
Matrizen• Viele Berechnungen
über 4x4-Mariezen(z.B. Position/Ausrichtung,Projektion, …)
• Grundzustand ist die Einheitsmatrix• Nutzung als Position/Ausrichtung:
(a01, a02, a03) – Links(a05, a06, a07) – Oben(a09, a10, a11) – Vorn(a13, a14, a15) – Position
![Page 9: Proseminar Computergrafik: OpenGL](https://reader036.vdocuments.site/reader036/viewer/2022081421/568148e8550346895db602c6/html5/thumbnails/9.jpg)
23.05.2006 - Proseminar Computergrafik: OpenGL Marcel Heckel 9 / 38
2. Etwas 3D-Mathematik
MatrizenTranslation: Skalierung:
Rotation:
1000
100
010
001
z
y
x
T
1000
000
000
000
z
y
x
S
1000
0cossin0
0sin cos0
0001
XR
1000
0cos0sin
0010
0sin0cos
YR
1000
0100
00 cossin
00sincos
ZR
![Page 10: Proseminar Computergrafik: OpenGL](https://reader036.vdocuments.site/reader036/viewer/2022081421/568148e8550346895db602c6/html5/thumbnails/10.jpg)
23.05.2006 - Proseminar Computergrafik: OpenGL Marcel Heckel 10 / 38
2. Etwas 3D-Mathematik
Matrizen
Multiplikation:
• 2 Matrix-Operation werden durch Matrix-Multiplikation verbunden
• Matrix-Multiplikation ist nicht kommutativ Wichtig welche Reihenfolge:
erst Rotation und dann Translation, oder umgekehrt.
![Page 11: Proseminar Computergrafik: OpenGL](https://reader036.vdocuments.site/reader036/viewer/2022081421/568148e8550346895db602c6/html5/thumbnails/11.jpg)
23.05.2006 - Proseminar Computergrafik: OpenGL Marcel Heckel 11 / 38
3. Grundlegendes zu OpenGL
Arbeitsweise• schlankes hardwareunabhängiges
Interface • keine Unterstützung für Fenster bzw.
Benutzereingaben • keine Unterstützung für komplizierte 3D-
Formen (Autos, Menschen, Bäume, …)• Modell werde aus einfachen Primitiven wie
Dreiecke, Linien und Punkte zusammengesetzt
![Page 12: Proseminar Computergrafik: OpenGL](https://reader036.vdocuments.site/reader036/viewer/2022081421/568148e8550346895db602c6/html5/thumbnails/12.jpg)
23.05.2006 - Proseminar Computergrafik: OpenGL Marcel Heckel 12 / 38
3. Grundlegendes zu OpenGL
Arbeitsweise
• OpenGL ist ein Zustandsautomat
• Einmal gesetzte Einstellungen beleiben erhalten und gelten für die folgenden Operationen
![Page 13: Proseminar Computergrafik: OpenGL](https://reader036.vdocuments.site/reader036/viewer/2022081421/568148e8550346895db602c6/html5/thumbnails/13.jpg)
23.05.2006 - Proseminar Computergrafik: OpenGL Marcel Heckel 13 / 38
3. Grundlegendes zu OpenGL
Vertices und Primitiven
![Page 14: Proseminar Computergrafik: OpenGL](https://reader036.vdocuments.site/reader036/viewer/2022081421/568148e8550346895db602c6/html5/thumbnails/14.jpg)
23.05.2006 - Proseminar Computergrafik: OpenGL Marcel Heckel 14 / 38
3. Grundlegendes zu OpenGL
Vertices und Primitiven
![Page 15: Proseminar Computergrafik: OpenGL](https://reader036.vdocuments.site/reader036/viewer/2022081421/568148e8550346895db602c6/html5/thumbnails/15.jpg)
23.05.2006 - Proseminar Computergrafik: OpenGL Marcel Heckel 15 / 38
3. Grundlegendes zu OpenGL
Vertices und Primitiven
• Vierecken und Polygonen müssen konvex (nach außen gewölbt) sein, sonst nicht definierte Ausgabe
richtig falsch
![Page 16: Proseminar Computergrafik: OpenGL](https://reader036.vdocuments.site/reader036/viewer/2022081421/568148e8550346895db602c6/html5/thumbnails/16.jpg)
23.05.2006 - Proseminar Computergrafik: OpenGL Marcel Heckel 16 / 38
3. Grundlegendes zu OpenGL
Bibliotheken• Standardbibliothek: opengl32.dll• Alternativ: glew32.dll (mit Extrension-
Unterstützung)• glu.dll - OpenGL Utility Library
(viele nützliche Standardfunktionen zum Zeichnen)
• glut.dll - OpenGL Utility Toolkit(Funktionalität zu Fenstererzeugung und Nutzereingaben)
![Page 17: Proseminar Computergrafik: OpenGL](https://reader036.vdocuments.site/reader036/viewer/2022081421/568148e8550346895db602c6/html5/thumbnails/17.jpg)
23.05.2006 - Proseminar Computergrafik: OpenGL Marcel Heckel 17 / 38
3. Grundlegendes zu OpenGL
Funktionsbezeichnungen und Datentypen
• Beginnen mit gl…/glu…/glut…
• Funktionen nicht überladen verschiedene Funktionssuffixe für verschieden Datentypen
• Eigene Datentypbezeichnungen z.B.:GLint
![Page 18: Proseminar Computergrafik: OpenGL](https://reader036.vdocuments.site/reader036/viewer/2022081421/568148e8550346895db602c6/html5/thumbnails/18.jpg)
23.05.2006 - Proseminar Computergrafik: OpenGL Marcel Heckel 18 / 38
3. Grundlegendes zu OpenGL
Funktionsbezeichnungen und Datentypen
![Page 19: Proseminar Computergrafik: OpenGL](https://reader036.vdocuments.site/reader036/viewer/2022081421/568148e8550346895db602c6/html5/thumbnails/19.jpg)
23.05.2006 - Proseminar Computergrafik: OpenGL Marcel Heckel 19 / 38
3. Grundlegendes zu OpenGL
GLUT - Beispielvoid init(){ /* Initialisierung des Programms */ }void renderScene(void){
/* Szene zecihen */void glutSwapBuffers();
}void changeSize(int w, int h){}void keyFunction(unsigned char key, int x, int y){}int main(int argc, char* argv[]){
glutInit(&argc, argv);glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);glutInitWindowPosition(100,100);glutInitWindowSize(400,400);glutCreateWindow("kleines OpenGL Programm");glutDisplayFunc(renderScene);glutIdleFunc(renderScene);glutReshapeFunc(changeSize);glutKeyboardFunc(keyFunction);init();glutMainLoop();return 0;
}
![Page 20: Proseminar Computergrafik: OpenGL](https://reader036.vdocuments.site/reader036/viewer/2022081421/568148e8550346895db602c6/html5/thumbnails/20.jpg)
23.05.2006 - Proseminar Computergrafik: OpenGL Marcel Heckel 20 / 38
4. Zeichen
Primitiven zeichnen • Vertex-Angaben mit glVertex*()• nur zwischen glBegin(…) und glEnd()• Bei glBegin(GLenum mode) die
gewünschte Primitive angeben
![Page 21: Proseminar Computergrafik: OpenGL](https://reader036.vdocuments.site/reader036/viewer/2022081421/568148e8550346895db602c6/html5/thumbnails/21.jpg)
23.05.2006 - Proseminar Computergrafik: OpenGL Marcel Heckel 21 / 38
4. Zeichen
Primitiven zeichnenglBegin(GL_TRIANGLES);
glVertex3d(0.0,0.5,0.0);glVertex3d(0.0,0.0,0.0);glVertex3d(0.5,0.5,0.0);
glVertex3d(0.5,0.0,0.0);glVertex3d(0.0,-0.5,0.0);glVertex3d(0.5,-0.5,0.0);
glEnd();
glBegin(GL_QUADS);glVertex3d(-0.9,0.9,0.0);glVertex3d(-0.9,-0.9,0.0);glVertex3d(-0.1,-0.9,0.0);glVertex3d(-0.1,0.9,0.0);
glEnd();
![Page 22: Proseminar Computergrafik: OpenGL](https://reader036.vdocuments.site/reader036/viewer/2022081421/568148e8550346895db602c6/html5/thumbnails/22.jpg)
23.05.2006 - Proseminar Computergrafik: OpenGL Marcel Heckel 22 / 38
4. Zeichen
Das ganze mit etwas Farbe• Verschieden Farben für jedes Vertex möglich
Interpolation zw. den Farben jedes Vertices• 4 Farbanteile - RGBA: A - Alphawert
glBegin(GL_TRIANGLES);glColor3f(1.0f,0.0f,0.0f);glVertex3f( 0.0f, 1.0f, 0.0f);glColor3f(0.0f,1.0f,0.0f);glVertex3f(-1.0f,-1.0f, 1.0f);glColor3f(0.0f,0.0f,1.0f);glVertex3f( 1.0f,-1.0f, 1.0f);
glEnd();
![Page 23: Proseminar Computergrafik: OpenGL](https://reader036.vdocuments.site/reader036/viewer/2022081421/568148e8550346895db602c6/html5/thumbnails/23.jpg)
23.05.2006 - Proseminar Computergrafik: OpenGL Marcel Heckel 23 / 38
4. Zeichen
Vertex-Behandlung
![Page 24: Proseminar Computergrafik: OpenGL](https://reader036.vdocuments.site/reader036/viewer/2022081421/568148e8550346895db602c6/html5/thumbnails/24.jpg)
23.05.2006 - Proseminar Computergrafik: OpenGL Marcel Heckel 24 / 38
4. Zeichen Vertex-Behandlung
Projektion
![Page 25: Proseminar Computergrafik: OpenGL](https://reader036.vdocuments.site/reader036/viewer/2022081421/568148e8550346895db602c6/html5/thumbnails/25.jpg)
23.05.2006 - Proseminar Computergrafik: OpenGL Marcel Heckel 25 / 38
4. Zeichen
Tests vor dem Schreiben• Depth-Test: wichtigster Test: Prüfung ob
neues Pixel eine kleineren Tiefenwert hat als das alte
• Alpha-Test: Prüfung ob der Alfawert einer Bedingung entspricht (>,<,= Referenzwert)
• Stencil-Test: Bitmap welches die Bereiche kennzeichnet, in die nicht gezeichnet werden soll markiert.
![Page 26: Proseminar Computergrafik: OpenGL](https://reader036.vdocuments.site/reader036/viewer/2022081421/568148e8550346895db602c6/html5/thumbnails/26.jpg)
23.05.2006 - Proseminar Computergrafik: OpenGL Marcel Heckel 26 / 38
4. Zeichen
Wichtige Funktionen• glMatrixMode();• glLoadMatrix(); glMultMatrix();• glPushMatrix(); glPopMatrix();• glTranslate(); glRotate(); glScalar(); gluLookAt();
• glFrustum(); glOrtho(); gluPerspective();
• glViewport();
![Page 27: Proseminar Computergrafik: OpenGL](https://reader036.vdocuments.site/reader036/viewer/2022081421/568148e8550346895db602c6/html5/thumbnails/27.jpg)
23.05.2006 - Proseminar Computergrafik: OpenGL Marcel Heckel 27 / 38
5. Licht
Sinn von Licht • 3D-Szenen wirken wesentlich realistischer• Szenen in verschiedenen Farben
darstellen ohne die ganzen Eigenschaften neu zu setztenz.B.: Tageslicht / Sonnenuntergang
Weiteres:• OpenGL unterstützt bis zu 8 Lichtquellen• Abstrahlwinkel und Richtung können auch
definiert werden
![Page 28: Proseminar Computergrafik: OpenGL](https://reader036.vdocuments.site/reader036/viewer/2022081421/568148e8550346895db602c6/html5/thumbnails/28.jpg)
23.05.2006 - Proseminar Computergrafik: OpenGL Marcel Heckel 28 / 38
5. Licht
Lichtarten • ambient (umgebendes) Licht:
allg. Lichtverhältnissen
• diffuse (zerstreutes/ausbreitendes) Licht:matte Oberflächen
• specular (reflektiertes) Licht:glänzenden Oberflächen
![Page 29: Proseminar Computergrafik: OpenGL](https://reader036.vdocuments.site/reader036/viewer/2022081421/568148e8550346895db602c6/html5/thumbnails/29.jpg)
23.05.2006 - Proseminar Computergrafik: OpenGL Marcel Heckel 29 / 38
5. Licht
Normalen • Oberflächen-Richtung muss für jede
Primitive/Normale angegeben werden
• Sollten Länge 1 haben
• Beleuchtung der Fläche in Anteilen, wie die Normal zur Lichtquelle steht
• Gewölbte Flächen: Normalen mehr der Wölbung entsprechen lassen, nicht genau senkrecht zur Teilfläche
![Page 30: Proseminar Computergrafik: OpenGL](https://reader036.vdocuments.site/reader036/viewer/2022081421/568148e8550346895db602c6/html5/thumbnails/30.jpg)
23.05.2006 - Proseminar Computergrafik: OpenGL Marcel Heckel 30 / 38
5. Licht
Licht aktivieren• Licht ist standardmäßig ausgeschaltet:glEnable(GL_LIGHTING);glEnable(GL_LIGHT0);
• Einstellungen können mit glLightf{v} vorgenommen werden: Farbe, Position, Abstrahlwinkel, Abschwächung.
![Page 31: Proseminar Computergrafik: OpenGL](https://reader036.vdocuments.site/reader036/viewer/2022081421/568148e8550346895db602c6/html5/thumbnails/31.jpg)
23.05.2006 - Proseminar Computergrafik: OpenGL Marcel Heckel 31 / 38
6. Texturen
Sinn von Texturen
• Objekte mit vielen kleine Details währen sehr aufwendig zu zeichnen
Lösung: Über eine einfache Fläche ein Bild, das die Details zeigt, legen
• Ist wesentlich schneller und sieht (meist) auch besser aus.
![Page 32: Proseminar Computergrafik: OpenGL](https://reader036.vdocuments.site/reader036/viewer/2022081421/568148e8550346895db602c6/html5/thumbnails/32.jpg)
23.05.2006 - Proseminar Computergrafik: OpenGL Marcel Heckel 32 / 38
6. Texturen
Allgemein • Arrays aus RGB(A)-Werten
• Bis OpenGL 1.5: Texture-Maße mussten 2er-Potenz sein (2^n) seit 2.0 nicht mehr
• mögliche Dimensionen: 1D, 2D und 3D!!
![Page 33: Proseminar Computergrafik: OpenGL](https://reader036.vdocuments.site/reader036/viewer/2022081421/568148e8550346895db602c6/html5/thumbnails/33.jpg)
23.05.2006 - Proseminar Computergrafik: OpenGL Marcel Heckel 33 / 38
6. Texturen
Texturkoordinaten und Wiederholung
• Angabe mit glTexCoord()2D: (0.0, 0.0) linke untere Ecke
(1.0, 1.0) rechte obere Ecke
• Bezeichnung: s, t, r (Breite, Höhe, Tiefe)
• Bei Werten außerhalb [0.0; 1.0]: Wiederholung der Textur (std.)oder Streckung der letzten Reihe der Textur
![Page 34: Proseminar Computergrafik: OpenGL](https://reader036.vdocuments.site/reader036/viewer/2022081421/568148e8550346895db602c6/html5/thumbnails/34.jpg)
23.05.2006 - Proseminar Computergrafik: OpenGL Marcel Heckel 34 / 38
6. Texturen
Texturkoordinaten und Wiederholung
• glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_S_WRAP, *** );
• glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_T_WRAP, *** );
*** = GL_REPEAT *** = GL_CLAMP
![Page 35: Proseminar Computergrafik: OpenGL](https://reader036.vdocuments.site/reader036/viewer/2022081421/568148e8550346895db602c6/html5/thumbnails/35.jpg)
23.05.2006 - Proseminar Computergrafik: OpenGL Marcel Heckel 35 / 38
6. Texturen
Filter• Magnifikation: starke Vergrößerung• Minifikation: starke Verkleinerung
Allgemein 2 Filtertypen:
GL_NEAREST: das Pixel was am ehesten passt (große Pixel bei Vergrößerung)
GL_LINEAR: Mittelwert aus dem umgebenden Pixel (langsamer, unscharf bei Vergrößerung)
Verkleinerung: ähnliche Ergebnisse beider Verfahren; Problem: „blinkende“ Texturen
![Page 36: Proseminar Computergrafik: OpenGL](https://reader036.vdocuments.site/reader036/viewer/2022081421/568148e8550346895db602c6/html5/thumbnails/36.jpg)
23.05.2006 - Proseminar Computergrafik: OpenGL Marcel Heckel 36 / 38
6. Texturen
Mip-Maps• Mip = „multum in parvo“ - „viel auf kleinem Platz“ • mehrere verkleinerte Versionen vom Originalbild • Verhindert „blinkende“ Texturen.• schneller
![Page 37: Proseminar Computergrafik: OpenGL](https://reader036.vdocuments.site/reader036/viewer/2022081421/568148e8550346895db602c6/html5/thumbnails/37.jpg)
23.05.2006 - Proseminar Computergrafik: OpenGL Marcel Heckel 37 / 38
6. Texturen
Texturen definieren
• glEnable(GL_TEXTURE_2D);• glTexImage2D – normal• gluBuild2DMipmaps – autom. Mipmap
ErzeugungAktuelle Einstellungen von glTexParameter werden für die Textur übernommen
![Page 38: Proseminar Computergrafik: OpenGL](https://reader036.vdocuments.site/reader036/viewer/2022081421/568148e8550346895db602c6/html5/thumbnails/38.jpg)
23.05.2006 - Proseminar Computergrafik: OpenGL Marcel Heckel 38 / 38
Quellen
• Jackie Neider, Tom Davis, Mason Woo: „OpenGL Programming Guide“, Release 1, 1994
• http://nehe.gamedev.net• http://www.lighthouse3d.com/opengl/glut/• http://graphics.cs.uni-sb.de/Courses/ws9900/cg-
seminar/Ausarbeitung/Philipp.Walter/• http://www.opengl.org• http://de.wikipedia.org