300 likes | 443 Views
Einsteigerkurs. Andy Reimann - Mai 2011. Trailer. Intro. Roadmap. Geschichte von OpenGL Buffer und Fenster Fenster-Management mit Glut - OpenGL Utility Toolkit PROC: Fenster initialisieren Die Transformation-Pileline von OpenGL PROC: Moving Triangle
E N D
Einsteigerkurs Andy Reimann - Mai 2011
Trailer Intro
Roadmap • Geschichte von OpenGL • Buffer und Fenster • Fenster-Management mit Glut - OpenGL Utility Toolkit • PROC: Fenster initialisieren • Die Transformation-Pileline von OpenGL • PROC: Moving Triangle • Beleuchtungsmodell und Materialeigenschaften • PROC: Materialized Teapot • Einführung in DevIL - Texturen laden und anwenden • PROC: Textured Teapot
Hinweise zum Vortrag • Da Zeit knapp, viele Detailinformationen nicht abgedeckt • können in Tutorials (Linkliste am Ende) selbst erlernt werden • Vortrag gibt einen Überblick • Wenn Fragen auftauchen, dann Fragen • Nach einer Einführung gibt es interaktives Arbeiten an Beispielen
Geschichte von OpenGL - 1992 • SiliconGraphics (SGI) 1992 veröffentlichten erste OpenGL API Spec (kein Code) • Hersteller müssen eigene Implementierung mitbringen Flexibilität Erweiterbarkeit
Geschichte von OpenGL - 1994 • Windows NT (1994) -> erstmals OpenGL Support • John Carmack (id Software) -> Erste Implementierung von Quake 1996 • Beginn des API-Wars zwischen OpenGL und Direct3D (bis Heute!) Bis ca. 2000 waren noch fast alle Berechnungen im Softwaremode ohne Grafikunterstützung implementiert!
Geschichte von OpenGL - 2000 • GPU Performance steigt exponentiell • viele Software-Features nun auf GPU implementiert • Der neue Weg heißt BUFFERS
Geschichte von OpenGL - 2000 • GPU Performance steigt exponentiell • viele Software-Features nun auf GPU implementiert • Der neue Weg heißt BUFFERS Buffer: Ein Buffer ist ein Stück Speicher, wo temporäre Daten gespeichert werden. Wenn die Arbeit an einem Buffer beendet wird, wird dieser gelöscht und kann wieder verwendet werden. Beliebige Daten können mit nur einem Call übertragen werden!
Geschichte von OpenGL - 2004 • Erwachen nach einer 4-Jährigen Stagnationsphase • OpenGL unterstützt Shader mit GLSL -> Version 2.0 veröffentlicht • Leider erst 4 Jahre nachdem Direct3D dies tut • verliert werter an Boden
Geschichte von OpenGL - 2006 • Khronos Group leitet OpenGL • Gruppe von Software und Hardware Herstellern • bringen OpenGL wieder an das Tageslicht
Geschichte von OpenGL - 2008 • OpenGL 3.0 veröffentlicht • volle Backward-Compatibility • jedoch viele angekündigten Veränderungen waren nicht enthalten Hat OpenGL den API-War verloren? NEIN! • viele Direct3D 10 Features doch enthalten • diese aber auch unter Windows XP einsatzfähig
Geschichte von OpenGL - 2009 • OpenGL 3.1 veröffentlicht • Spec enthält nun kein immediate mode mehr • OpenGL 3.2 veröffentlicht • API nun gleichauf mit Direct3D 10!
Geschichte von OpenGL - 2010 • OpenGL 4.0 veröffentlicht (gleichauf mit Direct3D 11) • OpenGL 3.3 gleichzeitig für ältere Hardware veröffentlicht • implementiert so viele Features wie möglich von OpenGL 4.0 • OpenGL 4.x Requirements • NVIDIA GTX 400 • ATI Radeon HD 5000 series
Die neuen Browser Startseiten :) OpenGL The Blue Book OpenGL The Red Book
Buffer und Fenster - Definition Fenster: Ein offener Bereich, den eine Applikation mit darzustellenden Daten füllen kann.
Buffer und Fenster - Definition Fenster: Ein offener Bereich, den eine Applikation mit darzustellenden Daten füllen kann. Buffer: Ein Stück Speicher, der einem Fenster übergeben werden kann, um ihn sichtbar zu machen.
Buffer und Fenster • sequenzielle Darstellung und Berechnung • Frame-to-Frame Übergänge sichtbar • Animationen wirken abgehackt
Buffer und Fenster • SwapBuffer sehr effizient • immer ein Buffer zum Anzeigen bereit (Multithreading)
Fenster-Management mit Glut - OpenGL Utility Toolkit • Was ist GLUT? • Contexterstellung (Application<->Fenster Interaktion) • Plattformübergreifend • Freeglut ist modernere Implementierung (kann OpenGL 4.0 Context erstellen [get it]) Example: 1. Fenster initialisieren
Die Transformation-Pileline von OpenGL • Modelview Matrix: Transformation der Objekte im Raum • Projection Matrix: Kameramodell • View Matrix: Fensterkoordinaten • Color Matrix: Farbwert Transformation • Texture Matrix: Textur Koordinaten Transformation • Stackverhalten der Modelview Matrix: • glPushMatrix() und glPopMatrix() • geziehlte Hintereinanderausführung von Transformationen • geziehltes Rückgängig machen von Transformationen • Stacktiefe: Spec = mindestens 32 bei Modelview und mindestens 8 bei Projection Matrix
Die Transformation-Pileline von OpenGL glMatrixMode( GL_MODELVIEW ); glTranslate(x,y,z); glScale(x,y,z); glRotate(angle,x,y,z); glMatrixMode( GL_PROJECTION ); glFrustum(l,r,b,t,n,f); glOrtho(l,r,b,t,n,f); glViewport(w,h);
Die Transformation-Pileline von OpenGL Example: 2. Moving Triangle
Die Transformation-Pileline von OpenGL • Vertiefung und Erweiterung des Wissens: • Wiederholung, Wiederholung, Wiederholung • eigene Mathematik Klassen oder Bibliotheken verwenden [get gml]
Beleuchtungsmodell und Materialeigenschaften • Eingebaute Beleuchtung für bis zu 8 Spotlights, Omnidirectional Lights und Directional Lights • 3D-Wahrnehmung ermöglicht • Phong Modell: • ambient: gleichmäßiges Licht an jedem Punkt • diffus: Omnidirektionales Licht, welches Punkte abhängig von ihrer Position ausleuchtet • spekular: Glanzlicht auf glatten Oberflächen Example: 3. Materialized Teapot
Beleuchtungsmodell und Materialeigenschaften • Vertiefung und Erweiterung des Wissens: • Normalenvektoren und Beleuchtung • Lichtfarben
Einführung in DevIL - Texturen laden und anwenden • DevIL ist die am weitesten verbreitete Lib [get it] • unterstützt alle gängigen Bildformate • Anlehnung der API an OpenGL Example: 4. Textured Teapot
Einführung in DevIL - Texturen laden und anwenden • Vertiefung und Erweiterung des Wissens: • Texturkoordinaten und Texturkoordinatengenerierung • Bedeutung von Min- und Magfilter
Agenda Fortgeschrittenenkurs • Buffer für Vertices, Indices, Pixels und Frames • Shader • Beschleunigungsstrukturen (Octree, Bounding Volume, ...) • ... wünscht euch was :)
Tutorial Liste http://nehe.gamedev.net/(deutsche Übersetzung: http://www.codeworx.org/opengl_tuts.php) http://www.spieleprogrammierung.net/p/opengl-tutorial-liste.html http://wiki.delphigl.com/index.php/Tutorial http://www.swiftless.com/opengltuts.html http://www.opengl.org/code/ http://www.xmission.com/~nate/tutors.html http://www.lighthouse3d.com/opengl/tutorials.shtml http://www.paulsprojects.net/tutorials/tutorials.html http://www.mario-konrad.ch/index.php?page=20400 http://www.codecolony.de/OpenGL/