30
© Virtuelle Präsenz WS08/09, Uni Ulm Kapitel 4 Grafik: Echtzeitgrafik OpenGL

Grafik: Echtzeitgrafik OpenGL - Verteilte Systeme · PDF fileOpenGL OpenGL Schnittstelle für 3D-Computergrafik

  • Upload
    donhan

  • View
    224

  • Download
    1

Embed Size (px)

Citation preview

Page 1: Grafik: Echtzeitgrafik OpenGL - Verteilte Systeme · PDF fileOpenGL OpenGL Schnittstelle für 3D-Computergrafik

© Virtuelle Präsenz WS08/09, Uni Ulm

Kapitel 4

Grafik:Echtzeitgrafik

OpenGL

Page 2: Grafik: Echtzeitgrafik OpenGL - Verteilte Systeme · PDF fileOpenGL OpenGL Schnittstelle für 3D-Computergrafik

© Virtuelle Präsenz WS08/09, Uni Ulm

4.1

ComputergrafikEchtzeitgrafik

Page 3: Grafik: Echtzeitgrafik OpenGL - Verteilte Systeme · PDF fileOpenGL OpenGL Schnittstelle für 3D-Computergrafik

© Virtuelle Präsenz WS08/09, Uni Ulm

4.1

Techniken im VergleichEchtzeitgrafik

Page 4: Grafik: Echtzeitgrafik OpenGL - Verteilte Systeme · PDF fileOpenGL OpenGL Schnittstelle für 3D-Computergrafik

© Virtuelle Präsenz WS08/09, Uni Ulm

4.1

Techniken im VergleichEchtzeitgrafik

Page 5: Grafik: Echtzeitgrafik OpenGL - Verteilte Systeme · PDF fileOpenGL OpenGL Schnittstelle für 3D-Computergrafik

© Virtuelle Präsenz WS08/09, Uni Ulm

4.1

Techniken im VergleichEchtzeitgrafik

Page 6: Grafik: Echtzeitgrafik OpenGL - Verteilte Systeme · PDF fileOpenGL OpenGL Schnittstelle für 3D-Computergrafik

© Virtuelle Präsenz WS08/09, Uni Ulm

4.1

Computergrafik● Raytracing vs. Echtzeitgrafik

Echtzeitgrafik

Page 7: Grafik: Echtzeitgrafik OpenGL - Verteilte Systeme · PDF fileOpenGL OpenGL Schnittstelle für 3D-Computergrafik

© Virtuelle Präsenz WS08/09, Uni Ulm

4.1

EchtzeitgrafikEchtzeitgrafik

● 3D-Grafik– Bis zu 2 millionen Dreiecken

– 85.000 Shaderprogramme

● Grafikkarten– Leistung bis zu 1 Tflops

– bis zu 800 Shader ALUs

– Geschwindigkeitsverdopplung alle 6 Monate

Page 8: Grafik: Echtzeitgrafik OpenGL - Verteilte Systeme · PDF fileOpenGL OpenGL Schnittstelle für 3D-Computergrafik

© Virtuelle Präsenz WS08/09, Uni Ulm

4.1

EchtzeitgrafikEchtzeitgrafik

● Anwendung– Vorbereitung der Grafikdaten

● Auswahl der Daten – Kollisionserkennung

– Physik

– KI

– Sound

Page 9: Grafik: Echtzeitgrafik OpenGL - Verteilte Systeme · PDF fileOpenGL OpenGL Schnittstelle für 3D-Computergrafik

© Virtuelle Präsenz WS08/09, Uni Ulm

4.1

Echtzeitgrafik

Modell- & KameratransformationEchtzeitgrafik

Page 10: Grafik: Echtzeitgrafik OpenGL - Verteilte Systeme · PDF fileOpenGL OpenGL Schnittstelle für 3D-Computergrafik

© Virtuelle Präsenz WS08/09, Uni Ulm

4.1

EchtzeitgrafikEchtzeitgrafik

● Beleuchtung– Lichtquellen

– Texturen

– Farben

Page 11: Grafik: Echtzeitgrafik OpenGL - Verteilte Systeme · PDF fileOpenGL OpenGL Schnittstelle für 3D-Computergrafik

© Virtuelle Präsenz WS08/09, Uni Ulm

4.1

EchtzeitgrafikEchtzeitgrafik

● Projektion– Zunächst Sichtbarkeitsfrustum

– Transformation in Würfel

– Koordinaten (-1, 1)

Page 12: Grafik: Echtzeitgrafik OpenGL - Verteilte Systeme · PDF fileOpenGL OpenGL Schnittstelle für 3D-Computergrafik

© Virtuelle Präsenz WS08/09, Uni Ulm

4.1

Echtzeitgrafik

ClippingEchtzeitgrafik

Page 13: Grafik: Echtzeitgrafik OpenGL - Verteilte Systeme · PDF fileOpenGL OpenGL Schnittstelle für 3D-Computergrafik

© Virtuelle Präsenz WS08/09, Uni Ulm

4.1

Echtzeitgrafik

Window- & ViewporttransformationEchtzeitgrafik

Page 14: Grafik: Echtzeitgrafik OpenGL - Verteilte Systeme · PDF fileOpenGL OpenGL Schnittstelle für 3D-Computergrafik

© Virtuelle Präsenz WS08/09, Uni Ulm

4.1

EchtzeitgrafikEchtzeitgrafik

● Rasterung– Einfärbung der Pixel

● Interpolation– Sichtbarkeitsprüfung

Page 15: Grafik: Echtzeitgrafik OpenGL - Verteilte Systeme · PDF fileOpenGL OpenGL Schnittstelle für 3D-Computergrafik

© Virtuelle Präsenz WS08/09, Uni Ulm

4.1

EchtzeitgrafikEchtzeitgrafik

● Baukasten mit Spezialeffekten

Page 16: Grafik: Echtzeitgrafik OpenGL - Verteilte Systeme · PDF fileOpenGL OpenGL Schnittstelle für 3D-Computergrafik

© Virtuelle Präsenz WS08/09, Uni Ulm

4.1

Objekte - RaytracingEchtzeitgrafik

● Quads oder Nurbs

Page 17: Grafik: Echtzeitgrafik OpenGL - Verteilte Systeme · PDF fileOpenGL OpenGL Schnittstelle für 3D-Computergrafik

© Virtuelle Präsenz WS08/09, Uni Ulm

4.1

Objekte - EchtzeitgrafikEchtzeitgrafik

● Vielzahl von Dreiecken

Page 18: Grafik: Echtzeitgrafik OpenGL - Verteilte Systeme · PDF fileOpenGL OpenGL Schnittstelle für 3D-Computergrafik

© Virtuelle Präsenz WS08/09, Uni Ulm

4.1

ObjekteEchtzeitgrafik

● Definiert durch Eckpunkte (Vertizes)● Vertex

– Position

– Farbe

– Textur

– Normale

Normal

Edge

Mesh

Face

Page 19: Grafik: Echtzeitgrafik OpenGL - Verteilte Systeme · PDF fileOpenGL OpenGL Schnittstelle für 3D-Computergrafik

© Virtuelle Präsenz WS08/09, Uni Ulm

4.1

ShaderEchtzeitgrafik

● Früher: Bestimmung der Farbe● Heute: Vertex, Geometry, Compute● Ausführung pro Pixel/Vertex● Softwaremodul

– Renderman Shader

● Hardwaremodul– Bestandteil aller modernen Grafikkarten

– Unified Shader

Page 20: Grafik: Echtzeitgrafik OpenGL - Verteilte Systeme · PDF fileOpenGL OpenGL Schnittstelle für 3D-Computergrafik

© Virtuelle Präsenz WS08/09, Uni Ulm

4.2

OpenGLOpenGL

● Schnittstelle für 3D-Computergrafik● Unabhängig von Plattform und Sprache● Zustandsautomat● Standardisierung durch Konsortium● Emulation von Funktionen● Farbe = Summe aller Lichtquellen

Page 21: Grafik: Echtzeitgrafik OpenGL - Verteilte Systeme · PDF fileOpenGL OpenGL Schnittstelle für 3D-Computergrafik

© Virtuelle Präsenz WS08/09, Uni Ulm

4.2

OpenGLOpenGL

● reine Grafikausgabe● Glu

– Utility Bibliothek

– Transformation Kamera

– komplexe Objekte

● Glut– Abstraktion Fenstermanager

– Eingabefunktionen

Page 22: Grafik: Echtzeitgrafik OpenGL - Verteilte Systeme · PDF fileOpenGL OpenGL Schnittstelle für 3D-Computergrafik

© Virtuelle Präsenz WS08/09, Uni Ulm

4.2

OpenGLOpenGL

● Festlegen der Position

● Zeichnen von Dreiecken

● Zeichnen von Quadraten

glBegin(GL_TRIANGLES); // Drawing Using TrianglesglVertex3f( 0.0f, 1.0f, 0.0f); // TopglVertex3f(-1.0f,-1.0f, 0.0f); // Bottom LeftglVertex3f( 1.0f,-1.0f, 0.0f); // Bottom Right

glEnd(); // Finished

// Move Left 1.5 Units And Into The Screen 6.0glTranslatef(-1.5f,0.0f,-6.0f);

glBegin(GL_QUADS); // Draw A Quad glVertex3f(-1.0f, 1.0f, 0.0f); // Top LeftglVertex3f( 1.0f, 1.0f, 0.0f); // Top RightglVertex3f( 1.0f,-1.0f, 0.0f); // Bottom RightglVertex3f(-1.0f,-1.0f, 0.0f); // Bottom Left

glEnd(); // Done

Page 23: Grafik: Echtzeitgrafik OpenGL - Verteilte Systeme · PDF fileOpenGL OpenGL Schnittstelle für 3D-Computergrafik

© Virtuelle Präsenz WS08/09, Uni Ulm

4.2

OpenGLOpenGL

Page 24: Grafik: Echtzeitgrafik OpenGL - Verteilte Systeme · PDF fileOpenGL OpenGL Schnittstelle für 3D-Computergrafik

© Virtuelle Präsenz WS08/09, Uni Ulm

4.2

OpenGLOpenGL

● Farbige Dreiecke

glBegin(GL_TRIANGLES); // Begin Drawing TrianglesglColor3f(1.0f,0.0f,0.0f); // Set The Color To RedglVertex3f( 0.0f, 1.0f, 0.0f); // Top PointglColor3f(0.0f,1.0f,0.0f); // Set The Color To GreenglVertex3f(-1.0f,-1.0f, 0.0f); // Bottom LeftglColor3f(0.0f,0.0f,1.0f); // Set The Color To BlueglVertex3f( 1.0f,-1.0f, 0.0f); // Bottom Right

glEnd(); // Done Drawing A Triangle

Page 25: Grafik: Echtzeitgrafik OpenGL - Verteilte Systeme · PDF fileOpenGL OpenGL Schnittstelle für 3D-Computergrafik

© Virtuelle Präsenz WS08/09, Uni Ulm

4.2

OpenGLOpenGL

Page 26: Grafik: Echtzeitgrafik OpenGL - Verteilte Systeme · PDF fileOpenGL OpenGL Schnittstelle für 3D-Computergrafik

© Virtuelle Präsenz WS08/09, Uni Ulm

4.2

OpenGLOpenGL

● Es wird wird 3D

glColor3f(1.0f,0.0f,0.0f); // RedglVertex3f( 0.0f, 1.0f, 0.0f); // Top Of Triangle (Front)glColor3f(0.0f,1.0f,0.0f); // GreenglVertex3f(-1.0f,-1.0f, 1.0f); // Left Of Triangle (Front)glColor3f(0.0f,0.0f,1.0f); // BlueglVertex3f( 1.0f,-1.0f, 1.0f); // Right Of Triangle (Front)

glColor3f(1.0f,0.0f,0.0f); // RedglVertex3f( 0.0f, 1.0f, 0.0f); // Top Of Triangle (Right)glColor3f(0.0f,0.0f,1.0f); // BlueglVertex3f( 1.0f,-1.0f, 1.0f); // Left Of Triangle (Right)glColor3f(0.0f,1.0f,0.0f); // GreenglVertex3f( 1.0f,-1.0f, -1.0f); // Right Of Triangle (Right)

glColor3f(1.0f,0.0f,0.0f); // RedglVertex3f( 0.0f, 1.0f, 0.0f); // Top Of Triangle (Back)glColor3f(0.0f,1.0f,0.0f); // GreenglVertex3f( 1.0f,-1.0f, -1.0f); // Left Of Triangle (Back)glColor3f(0.0f,0.0f,1.0f); // BlueglVertex3f(-1.0f,-1.0f, -1.0f); // Right Of Triangle (Back)

Page 27: Grafik: Echtzeitgrafik OpenGL - Verteilte Systeme · PDF fileOpenGL OpenGL Schnittstelle für 3D-Computergrafik

© Virtuelle Präsenz WS08/09, Uni Ulm

4.2

OpenGLOpenGL

Page 28: Grafik: Echtzeitgrafik OpenGL - Verteilte Systeme · PDF fileOpenGL OpenGL Schnittstelle für 3D-Computergrafik

© Virtuelle Präsenz WS08/09, Uni Ulm

4.2

OpenGLOpenGL

● Texturierung– Realistischere Darstellung

– Rastergrafik auf Gitternetz

– Anwendungen:● Simulation von Materialien● Light Maps● Shadow Maps● Bumb Mapping● Environmental Mapping

Page 29: Grafik: Echtzeitgrafik OpenGL - Verteilte Systeme · PDF fileOpenGL OpenGL Schnittstelle für 3D-Computergrafik

© Virtuelle Präsenz WS08/09, Uni Ulm

4.2

OpenGLOpenGL

● Erstellen einer Textur

● Festlegen der Texturkoodinaten

glGenTextures(1, &texture[0]); // Create The Texture glBindTexture(GL_TEXTURE_2D, texture[0]);glTexImage2D(GL_TEXTURE_2D, 0, 3, TextureImage[0]->sizeX,

TextureImage[0]->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[0]->data);

glBegin(GL_QUADS);// Front FaceglTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f); // Bottom LeftglTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, -1.0f, 1.0f); // Bottom RightglTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, 1.0f); // Top RightglTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, 1.0f); // Top Left

Page 30: Grafik: Echtzeitgrafik OpenGL - Verteilte Systeme · PDF fileOpenGL OpenGL Schnittstelle für 3D-Computergrafik

© Virtuelle Präsenz WS08/09, Uni Ulm

4.2

OpenGLOpenGL