|
|
Zeile 1: |
Zeile 1: |
| | Einführung in Echtzeit-3D-Computergraphik mit OpenGL von [[Benutzer:Kyrah|كرا]] |
| | |
| '''''[http://www.opengl.org/ OpenGL]''' (Open Graphics Library) ist eine Spezifikation für ein plattform- und programmiersprachenunabhängiges API (Application Programming Interface) zur Entwicklung von 3D-Computergrafik. Der OpenGL-Standard beschreibt etwa 250 Befehle, die die Darstellung komplexer 3D-Szenen in Echtzeit erlauben.'' --[[wde:OpenGL|Wikipedia]] | | '''''[http://www.opengl.org/ OpenGL]''' (Open Graphics Library) ist eine Spezifikation für ein plattform- und programmiersprachenunabhängiges API (Application Programming Interface) zur Entwicklung von 3D-Computergrafik. Der OpenGL-Standard beschreibt etwa 250 Befehle, die die Darstellung komplexer 3D-Szenen in Echtzeit erlauben.'' --[[wde:OpenGL|Wikipedia]] |
|
| |
|
| == Aktuell == | | == Aktuelles == |
| | |
| | Der erste Workshop findet am '''13.2.2010''' um 16:00 statt. |
|
| |
|
| '''*** Der erste Workshop findet am 13.2.2010 um 16:00 statt.. ***'''
| | == Unterlagen == |
|
| |
|
| Wiederholung der Einführungsworkshops von [[Benutzer:Kyrah|kyrah]] Anfang 2010.
| | (coming soon) |
|
| |
|
| Bitte unverbindlich eintragen, wer daran interessiert wäre:
| | == Interessenten == |
|
| |
|
| # [[Benutzer:Michael|michael]] | | # [[Benutzer:Michael|michael]] |
Zeile 41: |
Zeile 45: |
| # ''your name here'' | | # ''your name here'' |
|
| |
|
| == Unterlagen == | | == Archiv == |
| | |
| === Teil 1 ===
| |
| | |
| * [http://kyrah.net/scratch/opengl/cg-intro-1.pdf Folien 1. Teil] (15.9.2007) – PDF, 1052kB
| |
| | |
| ''Beispiel-Code''
| |
| # [https://whatever.metalab.at/user/kyrah/opengl/workshops/ws1/Makefile Makefile] – Achtung, muss für euer System angepasst werden:
| |
| ## Mac OS X mit SDL als framwork: <code>CFLAGS = SDLMain.m</code> und <code>LIBS = -framework SDL -framework Cocoa -framework OpenGL</code>
| |
| ## Unix (inkl. Mac OS X mit SDL als .dylib): <code>CFLAGS = `sdl-config --cflags`</code> und <code>LIBS = `sdl-config --libs` -lGL -lGLU</code>
| |
| # [https://whatever.metalab.at/user/kyrah/opengl/workshops/ws1/basicsdl.cpp basicsdl.cpp] SDL "Rahmen-Applikation"
| |
| # [https://whatever.metalab.at/user/kyrah/opengl/workshops/ws1/triangle.cpp triangle.cpp] weißes Dreieck auf schwarzem Hintergrund
| |
| # Perspektive
| |
| ## [https://whatever.metalab.at/user/kyrah/opengl/workshops/ws1/proj_ortho.cpp proj_ortho.cpp] orthographische Projektion
| |
| ## [https://whatever.metalab.at/user/kyrah/opengl/workshops/ws1/proj_persp.cpp proj_persp.cpp] perspektivische Projektion
| |
| # 3 Varianten, ein Dreieck zu verschieben:
| |
| ## [https://whatever.metalab.at/user/kyrah/opengl/workshops/ws1/transtri1.cpp transtri1.cpp] Vertices modifizieren
| |
| ## [https://whatever.metalab.at/user/kyrah/opengl/workshops/ws1/transtri2.cpp transtri2.cpp] glTranslatef()
| |
| ## [https://whatever.metalab.at/user/kyrah/opengl/workshops/ws1/transtri3.cpp transtri3.cpp] Kamera-Position verändern
| |
| # [https://whatever.metalab.at/user/kyrah/opengl/workshops/ws1/tricolor.cpp tricolor.cpp] Dreieck in Farbe
| |
| # [https://whatever.metalab.at/user/kyrah/opengl/workshops/ws1/3ddrawing.cpp 3ddrawing.cpp] 3D-Aufgabe "Haus"
| |
| # "Hausaufgabe"
| |
| ## [https://whatever.metalab.at/user/kyrah/opengl/workshops/ws1/solarsystem.cpp solarsystem.cpp] Musterlösung Sonnensystem
| |
| ## siehe auch [[Benutzer:Cygenb0ck|Max']] geniale Variante mit Perspektive vom Planeten aus: [[Media:Solar_final3.cpp.txt|solar_final3.cpp.txt]]
| |
| | |
| === Teil 2 ===
| |
| * [http://kyrah.net/scratch/opengl/cg-intro-2-reloaded.pdf Folien 2. Teil] (29.9.2007, WH 2.2.2008) - PDF, 1028 kB
| |
| | |
| ''Beispiel-Code''
| |
| # Review
| |
| ## [https://whatever.metalab.at/user/kyrah/opengl/workshops/ws2/review/review.cpp review.cpp] Wiederholung: Grundlagen
| |
| # Beleuchtung
| |
| ## [https://whatever.metalab.at/user/kyrah/opengl/workshops/ws2/lighting/firstlight.cpp firstlight.cpp] einfache Lichtquelle
| |
| ## [https://whatever.metalab.at/user/kyrah/opengl/workshops/ws2/lighting/materialcolour.cpp materialcolour.cpp] Materialfarben
| |
| ## [https://whatever.metalab.at/user/kyrah/opengl/workshops/ws2/lighting/components.cpp components.cpp] Materialkomponenten (ambient/diffuse/specular)
| |
| ## [https://whatever.metalab.at/user/kyrah/opengl/workshops/ws2/lighting/lightcolour.cpp lightcolour.cpp] Lichtfarben
| |
| ## [https://whatever.metalab.at/user/kyrah/opengl/workshops/ws2/lighting/movinglight.cpp movinglight.cpp] bewegte Lichtquelle
| |
| ## [https://whatever.metalab.at/user/kyrah/opengl/workshops/ws2/lighting/house.cpp house.cpp] das "Haus" vom 1. Workshop mit Beleuchtung
| |
| | |
| === Teil 3 ===
| |
| | |
| * [http://kyrah.net/scratch/opengl/cg-intro-3-reloaded.pdf Folien 3. Teil] (9.2.2008) - PDF, 836 kB
| |
| | |
| ''Beispiel-Code''
| |
| | |
| # Review
| |
| ## [https://whatever.metalab.at/user/kyrah/opengl/workshops/ws3/solsys/solarsystem.cpp solarsystem.cpp] Musterlösung beleuchtetes Sonnensystem
| |
| # Needful Things
| |
| ## [https://whatever.metalab.at/user/kyrah/opengl/workshops/ws3/animation/tricolor_fullscreen.cpp tricolor_fullscreen.cpp] Vollbild-Modus
| |
| ## [https://whatever.metalab.at/user/kyrah/opengl/workshops/ws3/animation/keyrepeat.cpp keyrepeat.cpp] verbesserte Tastatureingabe
| |
| ## [https://whatever.metalab.at/user/kyrah/opengl/workshops/ws3/animation/tba.cpp tba.cpp] zeitbasierte Animation
| |
| # Texturen
| |
| ## [https://whatever.metalab.at/user/kyrah/opengl/workshops/ws3/textures/intro/texturing.cpp texturing.cpp] [https://whatever.metalab.at/user/kyrah/opengl/workshops/ws3/textures/intro/Texture.h Texture.h] [https://whatever.metalab.at/user/kyrah/opengl/workshops/ws3/textures/intro/Texture.cpp Texture.cpp] [https://whatever.metalab.at/user/kyrah/opengl/workshops/ws3/textures/intro/Makefile Makefile] [https://whatever.metalab.at/user/kyrah/opengl/workshops/ws3/textures/intro/crate.png crate.png] Einführungsbeispiel zur Texturierung
| |
| ## [https://whatever.metalab.at/user/kyrah/opengl/workshops/ws3/textures/intro-expl/texturing.cpp texturing.cpp] [https://whatever.metalab.at/user/kyrah/opengl/workshops/ws3/textures/intro-expl/Image.h Image.h] [https://whatever.metalab.at/user/kyrah/opengl/workshops/ws3/textures/intro-expl/Image.cpp Image.cpp] [https://whatever.metalab.at/user/kyrah/opengl/workshops/ws3/textures/intro-expl/Makefile Makefile] [https://whatever.metalab.at/user/kyrah/opengl/workshops/ws3/textures/intro-expl/crate.png crate.png] Einführungsbeispiel ohne Abstraktion (more hardcore)
| |
| | |
| == Ports ==
| |
| * '''Python und pyglet''' ''(contributed by [[Benutzer:MariusKintel|Marius]])'' - die meisten C++ Beispiele sind bereits portiert, siehe jeweils Unterverzeichnis ''"python"'' am SVN-Server, zb. [https://whatever.metalab.at/user/kyrah/opengl/workshops/ws1/python/tricolor.py ws1/python/tricolor.py] (Port von [https://whatever.metalab.at/user/kyrah/opengl/workshops/ws1/tricolor.cpp tricolor.cpp])
| |
| * '''GTK und Python''' ''(contributed by [[Benutzer:Chrysn|chrysn]])'' - [https://whatever.metalab.at/user/kyrah/opengl/workshops/contrib/gtk_demo.py gtk_demo.py] (Port von [https://whatever.metalab.at/user/kyrah/opengl/workshops/ws1/tricolor.cpp tricolor.cpp])
| |
| * '''SharpGL''' ''(contributed by MovGP0)'' - 3D-Aufgabe "Haus" ([http://msdn2.microsoft.com/en-us/vstudio/aa700830.aspx Visual Studio 2008]; [http://www.dopecode.co.uk/sharpgl/index.php SharpGL]) : [[Media:SharpGL House.zip|SharpGL House]]
| |
| | |
| == Misc. ==
| |
| * '''Nate Robins' Tutorials:''' Die von mir gezeigten Demos zu Projektion, Transformationen, &c. könnt ihr von von [http://www.xmission.com/~nate/tutors.html Nate Robins' Website] herunterladen.
| |
| * [[Media:Solar_final2.cpp.txt|solar_final2.cpp.txt]] Musterlösung Sonnensystem
| |
| * [[Media:Solar_final3.cpp.txt|solar_final3.cpp.txt]] Musterlösung Sonnensystem mit Kamera auf Planet
| |
| * [http://www.opengl.org/resources/faq/technical/projection_abuse.php Help stamp out GL_PROJECTION abuse]; mehr zum thema GL_PROJECTION / gluLookAt
| |
| * http://www.glprogramming.com/red/ - sehr praktischer guide
| |
| | |
| Einige wichtige Anmerkungen zu den letzten Workshops:
| |
| | |
| === Lichtquellen-Positionierung ===
| |
| | |
| Die Position einer Lichtquelle wird bekanntlich wie folgt angegeben:
| |
| <code>GLfloat light_position[] = { 1.0, 1.0, 1.0, 0.0 };
| |
| glLightfv(GL_LIGHT0, GL_POSITION, light_position);</code>
| |
| | |
| Ich habe euch aber vorenthalten, was die vierte Komponente des Vektors ist.
| |
| | |
| '''WICHTIG!''' Wenn diese 0 ist, wird nur die Richtung der Lichtquelle in den Berechnungen verwendet, nicht ihre Position ''("directional light")''. Wenn die Lichtquelle an einem bestimmten Punkt in der Szene positioniert sein soll, sollte die letzte Komponente "1" sein.
| |
| | |
| Beispiel 1: Licht kommt aus der Richtung 1, 1, 1 (Position ist "unenendlich weit entfernt").
| |
| | |
| <code>GLfloat light_position[] = { 1.0, 1.0, 1.0, 0.0 };
| |
| glLightfv(GL_LIGHT0, GL_POSITION, light_position);</code>
| |
| | |
| Beispiel 2: Lichtquelle befindet sich am Punkt 0, 0, 0 (und scheint in alle Richtungen gleich stark).
| |
| | |
| <code>GLfloat light_position[] = { 0.0, 0.0, 0.0, 1.0 };
| |
| glLightfv(GL_LIGHT0, GL_POSITION, light_position);</code>
| |
| | |
| Siehe zb. Musterlösung [https://whatever.metalab.at/user/kyrah/opengl/workshops/ws3/solsys/solarsystem.cpp beleuchtetes Sonnensystem].
| |
| | |
| === V-Sync ===
| |
| | |
| Anscheinend war meine Aussage, dass die Synchronisation mit dem Monitor-Refresh vom GL-Treiber automatisch aktiviert wird, etwas voreilig... und ihr müsst euch doch selbst darum kümmern. (Danke an [[Benutzer:Chrysn|chrysn]] fuer den Hinweis und die aktive Mitwirkung beim Testen!)
| |
| | |
| Seit SDL 1.2.10 gibt es eine plattformunabhängige Möglichkeit, V-Sync zu aktivieren:
| |
| | |
| <code>SDL_GL_SetAttribute(SDL_GL_SWAP_CONTROL, 1);</code>
| |
| | |
| Achtung, dieser Aufruf muss *vor* SDL_SetVideoMode(...) passieren!
| |
|
| |
|
| ''Leider scheint diese Funktionalität aber unter Linux mit ATI-Treiber nicht zu funktionieren... (?)''
| | [[CGSG/Workshop-2007|Workshop-Reihe 2007/2008]] |
|
| |
|
| == Kontakt ==
| |
|
| |
|
| Wünsche, Anregungen, Beschwerden, Patches, etc. bitte an [[Benutzer:Kyrah|kyrah]].
| | ''Push teh pixels!!'' |
|
| |
|
| '''Push teh pixels!!'''
| |
|
| |
|
| [[Kategorie:Workshops]] | | [[Kategorie:Workshops]] |
| [[Kategorie:CGSG]] | | [[Kategorie:CGSG]] |