computer graphics & visualization
3D Graphics APIs: OpenGL & Fixed Function Pipeline
computer graphics & visualization
3D Graphics APIs: OpenGL & Fixed Function PipelineJan-Hendrik Behrmann
Übersicht1. OpenGL• Was ist das?• Wer ist das?• Programmbeispiel
2. Fixed Function Pipeline• Vom Modell zum Bild• Grundbegriffe• Die OpenGL-Pipeline
• Per-Vertex Operations• Rasterization• Per-Fragment Operations
computer graphics & visualization
3D Graphics APIs: OpenGL & Fixed Function PipelineJan-Hendrik Behrmann
OpenGL – Was ist das?OpenGL = Open Graphics Library
• Spezifikation einer API zur Entwicklung von 3D-Grafik-Anwendungen
• API = Application Programming Interface– Bibliothek von Funktionen zum Zugriff auf ein
darunterliegendes Softwaresystem.– Beispiel: Dateisystem-API eines Betriebssystems.
computer graphics & visualization
3D Graphics APIs: OpenGL & Fixed Function PipelineJan-Hendrik Behrmann
OpenGL – Ziele• Erleichterung für den Programmierer – Einheitliche API für die Grafikprogrammierung
• Plattformunabhängigkeit– Verbindlicher Leistungsumfang
• Hardwarenahe Grafikprogrammierung– Zugriff auf Hardwarefeatures
• Ständige Weiterentwicklung– Nutzung und Anpassung an neue Technologien
computer graphics & visualization
3D Graphics APIs: OpenGL & Fixed Function PipelineJan-Hendrik Behrmann
OpenGL – Wer ist das?• Entwickelt von Silicon Graphics (sgi)• Version 1.0 veröffentlich am 1. Juli 1992• Weiterentwicklung durch das Architecture
Review Board (ARB)– Konsortium von Unternehmen aus der Branche– Gründungsmitglied Microsoft steigt 2003 aus
• Seit September 2006 eingegliedert in die Khronos Group
computer graphics & visualization
3D Graphics APIs: OpenGL & Fixed Function PipelineJan-Hendrik Behrmann
Aus Sicht des Programmierers• OpenGL Library in gängigen
Entwicklungsumgebungen bereits enthalten• Nutzung über Einbindung der Library und
zugehörigen Headerdatei• Viele zusätzliche hilfreiche Libraries verfügbar• Breite Unterstützung bei Grafikkarten und
Betriebssystemen
computer graphics & visualization
3D Graphics APIs: OpenGL & Fixed Function PipelineJan-Hendrik Behrmann
Programmausschnittint DrawGLScene(GLvoid) // Here's Where We Do All The Drawing{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Clear Screen And Depth // Buffer
glLoadIdentity(); // Reset The Current Modelview MatrixglTranslatef(-1.5f,0.0f,-6.0f); // Move Left 1.5 Units And Into The
// Screen 6.0glBegin(GL_TRIANGLES); // Drawing Using Triangles
glColor3f(1.0f,0.0f,0.0f); // Set The Color To RedglVertex3f( 0.0f, 1.0f, 0.0f); // TopglColor3f(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(); // Finished Drawing The TriangleglTranslatef(3.0f,0.0f,0.0f); // Move Right 3 UnitsglColor3f(0.5f,0.5f,1.0f); // Set The Color To Blue One Time OnlyglBegin(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 Drawing The Quadreturn TRUE; // Keep Going
}
computer graphics & visualization
3D Graphics APIs: OpenGL & Fixed Function PipelineJan-Hendrik Behrmann
Programmausgabe
computer graphics & visualization
3D Graphics APIs: OpenGL & Fixed Function PipelineJan-Hendrik Behrmann
Übersicht1. OpenGL ✓2. Fixed Function Pipeline• Vom Modell zum Bild• Grundbegriffe• Die OpenGL-Pipeline• Per-Vertex Operations• Rasterization• Per-Fragment Operations
computer graphics & visualization
3D Graphics APIs: OpenGL & Fixed Function PipelineJan-Hendrik Behrmann
Vom Modell zum Bild• Aus der dreidimensionalen mathematischen
Beschreibung einer Szene soll ein zweidimensionales Bild erzeugt werden.
• Dieser Vorgang heißt Rendering.
Rendering
computer graphics & visualization
3D Graphics APIs: OpenGL & Fixed Function PipelineJan-Hendrik Behrmann
RaytracingGrundlegendes Verfahren:• Aussendung eines
Strahls vom Augpunkt durch die Bildebene.
• Trifft der Strahl auf ein Objekt, so nimmt der Bildpunkt seine Farbe an.
• Berechnung von Schatten durch Schattenstrahlen.
computer graphics & visualization
3D Graphics APIs: OpenGL & Fixed Function PipelineJan-Hendrik Behrmann
Rendering in OpenGL• OpenGL nutzt stattdessen eine Rendering-
Pipeline.• Die Pipeline erhält verschiedene Parameter als
Eingabe und berechnet aus ihnen ein Rasterbild.
• Der Ablauf der Berechnungen und die verwendeten Verfahren sind in OpenGL fest vorgegeben (Fixed Function Pipeline).
• Dadurch gut in Hardware umsetzbar.
computer graphics & visualization
3D Graphics APIs: OpenGL & Fixed Function PipelineJan-Hendrik Behrmann
Primitive und Vertices• Alle Grafikobjekte
bestehen aus Primitiven.• Primitive sind Punkte,
Linien, Dreiecke und andere Polygone.
• Primitive sind definiert durch ihre Eckpunkte (Vertices).
computer graphics & visualization
3D Graphics APIs: OpenGL & Fixed Function PipelineJan-Hendrik Behrmann
Primitive und Vertices• Vertices speichern Attribute:– Koordinaten– Farbinformationen– ggf. Texturkoordinaten– andere Informationen …
computer graphics & visualization
3D Graphics APIs: OpenGL & Fixed Function PipelineJan-Hendrik Behrmann
OpenGL Rendering Pipeline
(vereinfachte Darstellung)
computer graphics & visualization
3D Graphics APIs: OpenGL & Fixed Function PipelineJan-Hendrik Behrmann
Per-Vertex Operations• Die übergebenen Vertices werden bearbeitet :– Im dreidimensionalen Raum platzieren– In Kamerakoordinaten umrechnen– Auf 2-dimensionale Koordinaten projizieren
• Dies geschieht jeweils durch Multiplikation der Vertices mit geeigneten Matrizen.
computer graphics & visualization
3D Graphics APIs: OpenGL & Fixed Function PipelineJan-Hendrik Behrmann
Model Transformation• Eingabe: Vertices in lokalen Koordinaten• Die lokalen Koordinaten des Primitivs werden
durch Drehung, Skalierung und Verschiebung in Weltkoordinaten überführt.
• Ausgabe: Vertices in Weltkoordinaten(0,1)
(1,-1)(-1,-1)
lokale KoordinatenWeltkoordinatensystem
Model Transformation
computer graphics & visualization
3D Graphics APIs: OpenGL & Fixed Function PipelineJan-Hendrik Behrmann
Viewing Transformation• Eingabe: Vertices in Weltkoordinaten• Analog zur Model Transformation werden alle Vertices
entsprechend zur Kameraposition transformiert.• Die Kamera befindet sich nun im Ursprung, und blickt
die Tiefenachse hinunter.• Ausgabe: Vertices in Kamerakoordinaten.
In OpenGL: Model und Viewing Transformation zu ModelView-Matrix zusammengefasst.
computer graphics & visualization
3D Graphics APIs: OpenGL & Fixed Function PipelineJan-Hendrik Behrmann
Lighting• Für jeden Vertex wird ein Beleuchtungswert
berechnet.– Abhängig von Lichtquellen und den Normalenvektoren der
Vertices.– OpenGL nutzt das Phong-Beleuchtungsmodell.
computer graphics & visualization
3D Graphics APIs: OpenGL & Fixed Function PipelineJan-Hendrik Behrmann
OpenGL Rendering Pipeline
(vereinfachte Darstellung)
computer graphics & visualization
3D Graphics APIs: OpenGL & Fixed Function PipelineJan-Hendrik Behrmann
Projection Transformation• Eingabe: Vertices in Kamerakoordinaten• Sichtbarer Bereich wird als Pyramidenstumpf
aufgefasst (Frustum).
computer graphics & visualization
3D Graphics APIs: OpenGL & Fixed Function PipelineJan-Hendrik Behrmann
Projection Transformation• Der Stumpf wird nun zu einem Einheitswürfel
transformiert. Dabei tritt die typische perspektivische Verzerrung auf.
• Der Würfel enthält den gesamten sichtbaren Bereich.
computer graphics & visualization
3D Graphics APIs: OpenGL & Fixed Function PipelineJan-Hendrik Behrmann
Primitive Assembly• OpenGL gruppiert zusammengehörige Vertices
zu Primitiven.• Unsichtbare Primitive (die uns ihre Rückseite
zuwenden) werden entfernt (Backface Culling).• Primitive, die über den Würfel hinausragen,
werden entlang der Würfelkanten beschnitten.
Clippingneuer Vertex
computer graphics & visualization
3D Graphics APIs: OpenGL & Fixed Function PipelineJan-Hendrik Behrmann
Viewport Transformation• Die verbliebenen Vertices werden auf eine
zweidimensionale Ebene (Viewing Plane) projiziert. Der Tiefenwert bleibt allerdings noch erhalten.
• Die entstandenen normierten 2D-Koordinaten werden schließlich auf echte Pixelkoordinaten des Bildschirms transformiert.
computer graphics & visualization
3D Graphics APIs: OpenGL & Fixed Function PipelineJan-Hendrik Behrmann
OpenGL Rendering Pipeline
(vereinfachte Darstellung)
computer graphics & visualization
3D Graphics APIs: OpenGL & Fixed Function PipelineJan-Hendrik Behrmann
Rasterization• Allgemein: Umwandeln einer vektoriell
beschriebenen Bildinformation zu einem Rasterbild.
• Hier: Umwandeln der noch durch Vertices beschriebenen Primitiven in darstellbare Bildinformationen.
computer graphics & visualization
3D Graphics APIs: OpenGL & Fixed Function PipelineJan-Hendrik Behrmann
Scanline Rendering• Prüfung jedes Bildpunkts
auf Überdeckung mit dem Grafikprimitiv.
• Ablauf zeilenweise (in „Scanlines“).
• Bei Überdeckung Erstellung eines Fragments.
computer graphics & visualization
3D Graphics APIs: OpenGL & Fixed Function PipelineJan-Hendrik Behrmann
Rasterization• Durch Interpolation aus den Vertexattributen
werden die Beleuchtungs-, Farb- und ggf. Texturkoordinaten für das Fragment gewonnen.
rot
blaugrün
computer graphics & visualization
3D Graphics APIs: OpenGL & Fixed Function PipelineJan-Hendrik Behrmann
OpenGL Rendering Pipeline
(vereinfachte Darstellung)
computer graphics & visualization
3D Graphics APIs: OpenGL & Fixed Function PipelineJan-Hendrik Behrmann
Per-Fragment Operations1. Wenn für ein Fragment Texturkoordinaten
vorliegen, wird dem Fragment der passende Farbwert aus der Textur zugewiesen.
2. Durch eine Reihe von (optionalen) Tests, wird geprüft, ob das Fragment dargestellt werden soll.
computer graphics & visualization
3D Graphics APIs: OpenGL & Fixed Function PipelineJan-Hendrik Behrmann
Per-Fragment Operations• Tiefentest– Tiefeninformation des Fragments wird mit Depth
Buffer verglichen– Wenn ein Objekt mit geringerer Tiefe (vor dem
aktuellen Objekt) existiert, wird Fragment verworfen
– Ansonsten wird Framebuffer an dieser Stelle überschrieben bzw. mit neuem Farbwert vermischt.
computer graphics & visualization
3D Graphics APIs: OpenGL & Fixed Function PipelineJan-Hendrik Behrmann
Ausblick• Fixed Function Pipeline inzwischen überholt.• Hardware-Entwicklung macht weiterhin
Fortschritte.• OpenGL jetzt in Version 2.1 (mit in Teilen
programmierbarer Rendering-Pipeline)• Bald: Version 3.0– Größerer Umbau der API– Nicht mehr abwärtskompatibel zu Vorversionen– Keine Fixed Function Pipeline mehr
computer graphics & visualization
3D Graphics APIs: OpenGL & Fixed Function PipelineJan-Hendrik Behrmann
Fragen