Proseminar Computergrafik Open GL Marcel Heckel 23 05

  • Slides: 38
Download presentation
Proseminar Computergrafik: Open. GL Marcel Heckel 23. 05. 2006 - Proseminar Computergrafik: Open. GL

Proseminar Computergrafik: Open. GL Marcel Heckel 23. 05. 2006 - Proseminar Computergrafik: Open. GL Marcel Heckel

0. Inhalt 1. Allgemein Was ist Open. GL Geschichte 2. Etwas 3 D-Mathematik Das

0. Inhalt 1. Allgemein Was ist Open. GL Geschichte 2. Etwas 3 D-Mathematik Das Koordinatensystem Vektoren Matrizen 3. Grundlegendes zu Open. GL Arbeitsweise Vertices und Primitiven Bibliotheken Funktionsbezeichnungen und Datentypen GLUT-Beispiel 5. Licht Sinn von Lichtarten Licht und Normalen Licht aktivieren 6. Texturen Sinn von Texturen Allgemein Texturkoordinaten und Wiederholung Filter Mip-Maps Texturen definieren 4. Zeichen Primitiven zeichnen Das ganze mit etwas Farbe Vertex-Behandlung Tests vor dem Schreiben in den Puffer Wichtige Funktionen 23. 05. 2006 - Proseminar Computergrafik: Open. GL Marcel Heckel 2

1. Allgemein Was ist Open. GL? • Open. GL steht für Open Graphics Library

1. Allgemein Was ist Open. GL? • Open. GL steht für Open Graphics Library • geräte- und betriebssystemunabhängige Bibliothek für qualitative 2 D und 3 D Grafiken und grafisches Rendering • von Silicon Graphics Inc. (SGI) entwickelt • Ursprünglich Open. GL 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 Direct 3 D) 23. 05. 2006 - Proseminar Computergrafik: Open. GL Marcel Heckel 3

1. Allgemein Geschichte • Entstand aus IRIS GL (SGI) • 1992 Open. GL-Standard von

1. Allgemein Geschichte • Entstand aus IRIS GL (SGI) • 1992 Open. GL-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 23. 05. 2006 - Proseminar Computergrafik: Open. GL Marcel Heckel 4

1. Allgemein Geschichte Versionsfolge: • 1. Juli 1992: • 1997 • 16. März 1998:

1. Allgemein Geschichte Versionsfolge: • 1. Juli 1992: • 1997 • 16. März 1998: • 14. Oktober 1998: • 14. August 2001: • 24. Juli 2002: • 29. Juli 2003: • 7. September 2004: Open. GL 1. 0 Open. GL 1. 1 Open. GL 1. 2. 1 Open. GL 1. 3 Open. GL 1. 4 Open. GL 1. 5 Open. GL 2. 0 23. 05. 2006 - Proseminar Computergrafik: Open. GL Marcel Heckel 5

2. Etwas 3 D-Mathematik Das Koordinatensystem • Kartesisches Koordinatensystem • x-Achse: unterer Bildschirm-Rand •

2. Etwas 3 D-Mathematik Das Koordinatensystem • Kartesisches Koordinatensystem • x-Achse: unterer Bildschirm-Rand • y-Achse: linker Bildschirm-Rand • in den Monitor blickt man entlang der negativen z-Achse 23. 05. 2006 - Proseminar Computergrafik: Open. GL Marcel Heckel 6

2. Etwas 3 D-Mathematik Vektoren • Länge ein Vektors: |v|= • Einheitsvektor: v‘ =

2. Etwas 3 D-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) 23. 05. 2006 - Proseminar Computergrafik: Open. GL Marcel Heckel 7

2. Etwas 3 D-Mathematik Matrizen • Viele Berechnungen über 4 x 4 -Mariezen (z.

2. Etwas 3 D-Mathematik Matrizen • Viele Berechnungen über 4 x 4 -Mariezen (z. B. Position/Ausrichtung, Projektion, …) • Grundzustand ist die Einheitsmatrix • Nutzung als Position/Ausrichtung: (a 01, a 02, a 03) – Links (a 05, a 06, a 07) – Oben (a 09, a 10, a 11) – Vorn (a 13, a 14, a 15) – Position 23. 05. 2006 - Proseminar Computergrafik: Open. GL Marcel Heckel 8

2. Etwas 3 D-Mathematik Matrizen Translation: Skalierung: Rotation: 23. 05. 2006 - Proseminar Computergrafik:

2. Etwas 3 D-Mathematik Matrizen Translation: Skalierung: Rotation: 23. 05. 2006 - Proseminar Computergrafik: Open. GL Marcel Heckel 9

2. Etwas 3 D-Mathematik Matrizen Multiplikation: • 2 Matrix-Operation werden durch Matrix. Multiplikation verbunden

2. Etwas 3 D-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. 23. 05. 2006 - Proseminar Computergrafik: Open. GL Marcel Heckel 10

3. Grundlegendes zu Open. GL Arbeitsweise • schlankes hardwareunabhängiges Interface • keine Unterstützung für

3. Grundlegendes zu Open. GL Arbeitsweise • schlankes hardwareunabhängiges Interface • keine Unterstützung für Fenster bzw. Benutzereingaben • keine Unterstützung für komplizierte 3 DFormen (Autos, Menschen, Bäume, …) • Modell werde aus einfachen Primitiven wie Dreiecke, Linien und Punkte zusammengesetzt 23. 05. 2006 - Proseminar Computergrafik: Open. GL Marcel Heckel 11

3. Grundlegendes zu Open. GL Arbeitsweise • Open. GL ist ein Zustandsautomat • Einmal

3. Grundlegendes zu Open. GL Arbeitsweise • Open. GL ist ein Zustandsautomat • Einmal gesetzte Einstellungen beleiben erhalten und gelten für die folgenden Operationen 23. 05. 2006 - Proseminar Computergrafik: Open. GL Marcel Heckel 12

3. Grundlegendes zu Open. GL Vertices und Primitiven 23. 05. 2006 - Proseminar Computergrafik:

3. Grundlegendes zu Open. GL Vertices und Primitiven 23. 05. 2006 - Proseminar Computergrafik: Open. GL Marcel Heckel 13

3. Grundlegendes zu Open. GL Vertices und Primitiven 23. 05. 2006 - Proseminar Computergrafik:

3. Grundlegendes zu Open. GL Vertices und Primitiven 23. 05. 2006 - Proseminar Computergrafik: Open. GL Marcel Heckel 14

3. Grundlegendes zu Open. GL Vertices und Primitiven • Vierecken und Polygonen müssen konvex

3. Grundlegendes zu Open. GL Vertices und Primitiven • Vierecken und Polygonen müssen konvex (nach außen gewölbt) sein, sonst nicht definierte Ausgabe richtig 23. 05. 2006 - Proseminar Computergrafik: Open. GL falsch Marcel Heckel 15

3. Grundlegendes zu Open. GL Bibliotheken • Standardbibliothek: opengl 32. dll • Alternativ: glew

3. Grundlegendes zu Open. GL Bibliotheken • Standardbibliothek: opengl 32. dll • Alternativ: glew 32. dll (mit Extrension. Unterstützung) • glu. dll - Open. GL Utility Library (viele nützliche Standardfunktionen zum Zeichnen) • glut. dll - Open. GL Utility Toolkit (Funktionalität zu Fenstererzeugung und Nutzereingaben) 23. 05. 2006 - Proseminar Computergrafik: Open. GL Marcel Heckel 16

3. Grundlegendes zu Open. GL Funktionsbezeichnungen und Datentypen • Beginnen mit gl…/glut… • Funktionen

3. Grundlegendes zu Open. GL Funktionsbezeichnungen und Datentypen • Beginnen mit gl…/glut… • Funktionen nicht überladen verschiedene Funktionssuffixe für verschieden Datentypen • Eigene Datentypbezeichnungen z. B. : GLint 23. 05. 2006 - Proseminar Computergrafik: Open. GL Marcel Heckel 17

3. Grundlegendes zu Open. GL Funktionsbezeichnungen und Datentypen 23. 05. 2006 - Proseminar Computergrafik:

3. Grundlegendes zu Open. GL Funktionsbezeichnungen und Datentypen 23. 05. 2006 - Proseminar Computergrafik: Open. GL Marcel Heckel 18

3. Grundlegendes zu Open. GL GLUT - Beispiel void init() { /* Initialisierung des

3. Grundlegendes zu Open. GL GLUT - Beispiel void init() { /* Initialisierung des Programms */ } void render. Scene(void) { /* Szene zecihen */ void glut. Swap. Buffers(); } void change. Size(int w, int h) {} void key. Function(unsigned char key, int x, int y) {} int main(int argc, char* argv[]) { glut. Init(&argc, argv); glut. Init. Display. Mode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA); glut. Init. Window. Position(100, 100); glut. Init. Window. Size(400, 400); glut. Create. Window("kleines Open. GL Programm" ); glut. Display. Func(render. Scene); glut. Idle. Func(render. Scene); glut. Reshape. Func(change. Size); glut. Keyboard. Func(key. Function); init(); glut. Main. Loop(); return 0; } 23. 05. 2006 - Proseminar Computergrafik: Open. GL Marcel Heckel 19

4. Zeichen Primitiven zeichnen • Vertex-Angaben mit gl. Vertex*() • nur zwischen gl. Begin(…)

4. Zeichen Primitiven zeichnen • Vertex-Angaben mit gl. Vertex*() • nur zwischen gl. Begin(…) und gl. End() • Bei gl. Begin(GLenum mode) die gewünschte Primitive angeben 23. 05. 2006 - Proseminar Computergrafik: Open. GL Marcel Heckel 20

4. Zeichen Primitiven zeichnen gl. Begin(GL_TRIANGLES); gl. Vertex 3 d(0. 0, 0. 5, 0.

4. Zeichen Primitiven zeichnen gl. Begin(GL_TRIANGLES); gl. Vertex 3 d(0. 0, 0. 5, 0. 0); gl. Vertex 3 d(0. 0, 0. 0); gl. Vertex 3 d(0. 5, 0. 0); gl. Vertex 3 d(0. 0, -0. 5, 0. 0); gl. Vertex 3 d(0. 5, -0. 5, 0. 0); gl. End(); gl. Begin(GL_QUADS); gl. Vertex 3 d(-0. 9, 0. 0); gl. Vertex 3 d(-0. 1, 0. 9, 0. 0); gl. End(); 23. 05. 2006 - Proseminar Computergrafik: Open. GL Marcel Heckel 21

4. Zeichen Das ganze mit etwas Farbe • Verschieden Farben für jedes Vertex möglich

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 gl. Begin(GL_TRIANGLES); gl. Color 3 f(1. 0 f, 0. 0 f); gl. Vertex 3 f( 0. 0 f, 1. 0 f, 0. 0 f); gl. Color 3 f(0. 0 f, 1. 0 f, 0. 0 f); gl. Vertex 3 f(-1. 0 f, 1. 0 f); gl. Color 3 f(0. 0 f, 1. 0 f); gl. Vertex 3 f( 1. 0 f, -1. 0 f, 1. 0 f); gl. End(); 23. 05. 2006 - Proseminar Computergrafik: Open. GL Marcel Heckel 22

4. Zeichen Vertex-Behandlung 23. 05. 2006 - Proseminar Computergrafik: Open. GL Marcel Heckel 23

4. Zeichen Vertex-Behandlung 23. 05. 2006 - Proseminar Computergrafik: Open. GL Marcel Heckel 23

4. Zeichen Vertex-Behandlung Projektion 23. 05. 2006 - Proseminar Computergrafik: Open. GL Marcel Heckel

4. Zeichen Vertex-Behandlung Projektion 23. 05. 2006 - Proseminar Computergrafik: Open. GL Marcel Heckel 24

4. Zeichen Tests vor dem Schreiben • Depth-Test: wichtigster Test: Prüfung ob neues Pixel

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. 23. 05. 2006 - Proseminar Computergrafik: Open. GL Marcel Heckel 25

4. Zeichen Wichtige Funktionen • gl. Matrix. Mode(); • gl. Load. Matrix(); gl. Mult.

4. Zeichen Wichtige Funktionen • gl. Matrix. Mode(); • gl. Load. Matrix(); gl. Mult. Matrix(); • gl. Push. Matrix(); gl. Pop. Matrix(); • gl. Translate(); gl. Rotate(); gl. Scalar(); glu. Look. At(); • gl. Frustum(); gl. Ortho(); glu. Perspective(); • gl. Viewport(); 23. 05. 2006 - Proseminar Computergrafik: Open. GL Marcel Heckel 26

5. Licht Sinn von Licht • 3 D-Szenen wirken wesentlich realistischer • Szenen in

5. Licht Sinn von Licht • 3 D-Szenen wirken wesentlich realistischer • Szenen in verschiedenen Farben darstellen ohne die ganzen Eigenschaften neu zu setzten z. B. : Tageslicht / Sonnenuntergang Weiteres: • Open. GL unterstützt bis zu 8 Lichtquellen • Abstrahlwinkel und Richtung können auch definiert werden 23. 05. 2006 - Proseminar Computergrafik: Open. GL Marcel Heckel 27

5. Lichtarten • ambient (umgebendes) Licht: allg. Lichtverhältnissen • diffuse (zerstreutes/ausbreitendes) Licht: matte Oberflächen

5. Lichtarten • ambient (umgebendes) Licht: allg. Lichtverhältnissen • diffuse (zerstreutes/ausbreitendes) Licht: matte Oberflächen • specular (reflektiertes) Licht: glänzenden Oberflächen 23. 05. 2006 - Proseminar Computergrafik: Open. GL Marcel Heckel 28

5. Licht Normalen • Oberflächen-Richtung muss für jede Primitive/Normale angegeben werden • Sollten Länge

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 23. 05. 2006 - Proseminar Computergrafik: Open. GL Marcel Heckel 29

5. Licht aktivieren • Licht ist standardmäßig ausgeschaltet: gl. Enable(GL_LIGHTING); gl. Enable(GL_LIGHT 0); •

5. Licht aktivieren • Licht ist standardmäßig ausgeschaltet: gl. Enable(GL_LIGHTING); gl. Enable(GL_LIGHT 0); • Einstellungen können mit gl. Lightf{v} vorgenommen werden: Farbe, Position, Abstrahlwinkel, Abschwächung. 23. 05. 2006 - Proseminar Computergrafik: Open. GL Marcel Heckel 30

6. Texturen Sinn von Texturen • Objekte mit vielen kleine Details währen sehr aufwendig

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. 23. 05. 2006 - Proseminar Computergrafik: Open. GL Marcel Heckel 31

6. Texturen Allgemein • Arrays aus RGB(A)-Werten • Bis Open. GL 1. 5: Texture-Maße

6. Texturen Allgemein • Arrays aus RGB(A)-Werten • Bis Open. GL 1. 5: Texture-Maße mussten 2 er-Potenz sein (2^n) seit 2. 0 nicht mehr • mögliche Dimensionen: 1 D, 2 D und 3 D!! 23. 05. 2006 - Proseminar Computergrafik: Open. GL Marcel Heckel 32

6. Texturen Texturkoordinaten und Wiederholung • Angabe mit gl. Tex. Coord() 2 D: (0.

6. Texturen Texturkoordinaten und Wiederholung • Angabe mit gl. Tex. Coord() 2 D: (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 23. 05. 2006 - Proseminar Computergrafik: Open. GL Marcel Heckel 33

6. Texturen Texturkoordinaten und Wiederholung • gl. Tex. Parameteri(GL_TEXTURE_2 D, GL_TEXTURE_S_WRAP, *** ); •

6. Texturen Texturkoordinaten und Wiederholung • gl. Tex. Parameteri(GL_TEXTURE_2 D, GL_TEXTURE_S_WRAP, *** ); • gl. Tex. Parameteri(GL_TEXTURE_2 D, GL_TEXTURE_T_WRAP, *** ); *** = GL_REPEAT 23. 05. 2006 - Proseminar Computergrafik: Open. GL *** = GL_CLAMP Marcel Heckel 34

6. Texturen Filter • Magnifikation: starke Vergrößerung • Minifikation: starke Verkleinerung Allgemein 2 Filtertypen:

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 23. 05. 2006 - Proseminar Computergrafik: Open. GL Marcel Heckel 35

6. Texturen Mip-Maps • • Mip = „multum in parvo“ - „viel auf kleinem

6. Texturen Mip-Maps • • Mip = „multum in parvo“ - „viel auf kleinem Platz“ mehrere verkleinerte Versionen vom Originalbild Verhindert „blinkende“ Texturen. schneller 23. 05. 2006 - Proseminar Computergrafik: Open. GL Marcel Heckel 36

6. Texturen definieren • gl. Enable(GL_TEXTURE_2 D); • gl. Tex. Image 2 D –

6. Texturen definieren • gl. Enable(GL_TEXTURE_2 D); • gl. Tex. Image 2 D – normal • glu. Build 2 DMipmaps – autom. Mipmap Erzeugung Aktuelle Einstellungen von gl. Tex. Parameter werden für die Textur übernommen 23. 05. 2006 - Proseminar Computergrafik: Open. GL Marcel Heckel 37

Quellen • Jackie Neider, Tom Davis, Mason Woo: „Open. GL Programming Guide“, Release 1,

Quellen • Jackie Neider, Tom Davis, Mason Woo: „Open. GL Programming Guide“, Release 1, 1994 • http: //nehe. gamedev. net • http: //www. lighthouse 3 d. com/opengl/glut/ • http: //graphics. uni-sb. de/Courses/ws 9900/cgseminar/Ausarbeitung/Philipp. Walter/ • http: //www. opengl. org • http: //de. wikipedia. org 23. 05. 2006 - Proseminar Computergrafik: Open. GL Marcel Heckel 38