Upload
donhan
View
224
Download
1
Embed Size (px)
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