Grafik: Echtzeitgrafik OpenGL - Verteilte Systeme · PDF fileOpenGL OpenGL Schnittstelle...

Preview:

Citation preview

© Virtuelle Präsenz WS08/09, Uni Ulm

Kapitel 4

Grafik:Echtzeitgrafik

OpenGL

© Virtuelle Präsenz WS08/09, Uni Ulm

4.1

ComputergrafikEchtzeitgrafik

© Virtuelle Präsenz WS08/09, Uni Ulm

4.1

Techniken im VergleichEchtzeitgrafik

© Virtuelle Präsenz WS08/09, Uni Ulm

4.1

Techniken im VergleichEchtzeitgrafik

© Virtuelle Präsenz WS08/09, Uni Ulm

4.1

Techniken im VergleichEchtzeitgrafik

© Virtuelle Präsenz WS08/09, Uni Ulm

4.1

Computergrafik● Raytracing vs. Echtzeitgrafik

Echtzeitgrafik

© 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

© Virtuelle Präsenz WS08/09, Uni Ulm

4.1

EchtzeitgrafikEchtzeitgrafik

● Anwendung– Vorbereitung der Grafikdaten

● Auswahl der Daten – Kollisionserkennung

– Physik

– KI

– Sound

© Virtuelle Präsenz WS08/09, Uni Ulm

4.1

Echtzeitgrafik

Modell- & KameratransformationEchtzeitgrafik

© Virtuelle Präsenz WS08/09, Uni Ulm

4.1

EchtzeitgrafikEchtzeitgrafik

● Beleuchtung– Lichtquellen

– Texturen

– Farben

© Virtuelle Präsenz WS08/09, Uni Ulm

4.1

EchtzeitgrafikEchtzeitgrafik

● Projektion– Zunächst Sichtbarkeitsfrustum

– Transformation in Würfel

– Koordinaten (-1, 1)

© Virtuelle Präsenz WS08/09, Uni Ulm

4.1

Echtzeitgrafik

ClippingEchtzeitgrafik

© Virtuelle Präsenz WS08/09, Uni Ulm

4.1

Echtzeitgrafik

Window- & ViewporttransformationEchtzeitgrafik

© Virtuelle Präsenz WS08/09, Uni Ulm

4.1

EchtzeitgrafikEchtzeitgrafik

● Rasterung– Einfärbung der Pixel

● Interpolation– Sichtbarkeitsprüfung

© Virtuelle Präsenz WS08/09, Uni Ulm

4.1

EchtzeitgrafikEchtzeitgrafik

● Baukasten mit Spezialeffekten

© Virtuelle Präsenz WS08/09, Uni Ulm

4.1

Objekte - RaytracingEchtzeitgrafik

● Quads oder Nurbs

© Virtuelle Präsenz WS08/09, Uni Ulm

4.1

Objekte - EchtzeitgrafikEchtzeitgrafik

● Vielzahl von Dreiecken

© Virtuelle Präsenz WS08/09, Uni Ulm

4.1

ObjekteEchtzeitgrafik

● Definiert durch Eckpunkte (Vertizes)● Vertex

– Position

– Farbe

– Textur

– Normale

Normal

Edge

Mesh

Face

© 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

© 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

© Virtuelle Präsenz WS08/09, Uni Ulm

4.2

OpenGLOpenGL

● reine Grafikausgabe● Glu

– Utility Bibliothek

– Transformation Kamera

– komplexe Objekte

● Glut– Abstraktion Fenstermanager

– Eingabefunktionen

© 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

© Virtuelle Präsenz WS08/09, Uni Ulm

4.2

OpenGLOpenGL

© 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

© Virtuelle Präsenz WS08/09, Uni Ulm

4.2

OpenGLOpenGL

© 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)

© Virtuelle Präsenz WS08/09, Uni Ulm

4.2

OpenGLOpenGL

© 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

© 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

© Virtuelle Präsenz WS08/09, Uni Ulm

4.2

OpenGLOpenGL

Recommended