Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

3D Graphics APIs: OpenGL & Fixed Function Pipeline

Ähnliche Präsentationen


Präsentation zum Thema: "3D Graphics APIs: OpenGL & Fixed Function Pipeline"—  Präsentation transkript:

1 3D Graphics APIs: OpenGL & Fixed Function Pipeline

2 Übersicht OpenGL Fixed Function Pipeline Was ist das? Wer ist das?
Programmbeispiel Fixed Function Pipeline Vom Modell zum Bild Grundbegriffe Die OpenGL-Pipeline Per-Vertex Operations Rasterization Per-Fragment Operations

3 OpenGL = Open Graphics Library
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.

4 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

5 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

6 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

7 Programmausschnitt int 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 Matrix glTranslatef(-1.5f,0.0f,-6.0f); // Move Left 1.5 Units And Into The // Screen 6.0 glBegin(GL_TRIANGLES); // Drawing Using Triangles glColor3f(1.0f,0.0f,0.0f); // Set The Color To Red glVertex3f( 0.0f, 1.0f, 0.0f); // Top glColor3f(0.0f,1.0f,0.0f); // Set The Color To Green glVertex3f(-1.0f,-1.0f, 0.0f); // Bottom Left glColor3f(0.0f,0.0f,1.0f); // Set The Color To Blue glVertex3f( 1.0f,-1.0f, 0.0f); // Bottom Right glEnd(); // Finished Drawing The Triangle glTranslatef(3.0f,0.0f,0.0f); // Move Right 3 Units glColor3f(0.5f,0.5f,1.0f); // Set The Color To Blue One Time Only glBegin(GL_QUADS); // Draw A Quad glVertex3f(-1.0f, 1.0f, 0.0f); // Top Left glVertex3f( 1.0f, 1.0f, 0.0f); // Top Right glEnd(); // Done Drawing The Quad return TRUE; // Keep Going }

8 Programmausgabe

9 Übersicht OpenGL ✓ Fixed Function Pipeline Vom Modell zum Bild
Grundbegriffe Die OpenGL-Pipeline Per-Vertex Operations Rasterization Per-Fragment Operations

10 Vom Modell zum Bild Aus der dreidimensionalen mathematischen Beschreibung einer Szene soll ein zweidimensionales Bild erzeugt werden. Dieser Vorgang heißt Rendering. Rendering

11 Raytracing Grundlegendes 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.

12 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.

13 Primitive und Vertices
Alle Grafikobjekte bestehen aus Primitiven. Primitive sind Punkte, Linien, Dreiecke und andere Polygone. Primitive sind definiert durch ihre Eckpunkte (Vertices).

14 Primitive und Vertices
Vertices speichern Attribute: Koordinaten Farbinformationen ggf. Texturkoordinaten andere Informationen …

15 OpenGL Rendering Pipeline
(vereinfachte Darstellung)

16 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.

17 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) Model Transformation (-1,-1) (1,-1) Weltkoordinatensystem lokale Koordinaten

18 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.

19 Lighting Für jeden Vertex wird ein Beleuchtungswert berechnet.
Abhängig von Lichtquellen und den Normalenvektoren der Vertices. OpenGL nutzt das Phong-Beleuchtungsmodell.

20 OpenGL Rendering Pipeline
(vereinfachte Darstellung)

21 Projection Transformation
Eingabe: Vertices in Kamerakoordinaten Sichtbarer Bereich wird als Pyramidenstumpf aufgefasst (Frustum).

22 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.

23 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. neuer Vertex Clipping

24 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.

25 OpenGL Rendering Pipeline
(vereinfachte Darstellung)

26 Rasterization Allgemein: Umwandeln einer vektoriell beschriebenen Bildinformation zu einem Rasterbild. Hier: Umwandeln der noch durch Vertices beschriebenen Primitiven in darstellbare Bildinformationen.

27 Scanline Rendering Prüfung jedes Bildpunkts auf Überdeckung mit dem Grafikprimitiv. Ablauf zeilenweise (in „Scanlines“). Bei Überdeckung Erstellung eines Fragments.

28 Rasterization Durch Interpolation aus den Vertexattributen werden die Beleuchtungs-, Farb- und ggf. Texturkoordinaten für das Fragment gewonnen. rot grün blau

29 OpenGL Rendering Pipeline
(vereinfachte Darstellung)

30 Per-Fragment Operations
Wenn für ein Fragment Texturkoordinaten vorliegen, wird dem Fragment der passende Farbwert aus der Textur zugewiesen. Durch eine Reihe von (optionalen) Tests, wird geprüft, ob das Fragment dargestellt werden soll.

31 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.

32 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

33 Fragen


Herunterladen ppt "3D Graphics APIs: OpenGL & Fixed Function Pipeline"

Ähnliche Präsentationen


Google-Anzeigen