CGSG/Workshop: Unterschied zwischen den Versionen

aus Metalab Wiki, dem offenen Zentrum für meta-disziplinäre Magier und technisch-kreative Enthusiasten.
Zur Navigation springenZur Suche springen
(Termin: 13.2. 16:00)
 
(35 dazwischenliegende Versionen von 18 Benutzern werden nicht angezeigt)
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 ==
 +
 
 +
Übungsaufgabe: Beleuchtung in das 3D-Beispiel vom ersten Workshop ([https://whatever.metalab.at/user/kyrah/opengl/workshops/ws1/3ddrawing.cpp 3ddrawing.cpp]) einbauen.
 +
Wichtig: Normalvektoren angeben und auf korrekte Reihenfolge der Vertices [CCW cs. CW] achten!
 +
 
 +
Bei Interesse wird auch ein dritter Teil des Workshops stattfinden, der Termin wird auf der Mailingliste bekanntgegeben.
 +
 
 +
== Voraussetzungen ==
 +
=== Computergrafik ===
 +
Es sind keine Computergraphik-Vorkenntnisse erforderlich.
 +
 
 +
=== Programmierung ===
 +
Ihr solltet zumindest rudimentäre Programmierkenntnisse haben.
 +
 
 +
Mein Beispielcode ist in C, der Workshop macht aber durchaus nicht nur für C/C++-Hacker Sinn. Ihr könnt durchaus auch in Java oder Python oder Processing oder ... arbeiten, die Konzepte sind die gleichen. Für den Workshop ist es aber in jedem Fall von Vorteil, wenn ihr in der Lage seid, auf eurer Plattform ein C-Programm zu kompilieren und auszuführen, damit ihr die gezeigten Beispiele gleich live selber ausprobieren könnt.
 +
 
 +
Bitte dafür ''vor dem Workshop'' [http://www.libsdl.org/ libSDL] auf euren Rechnern installieren. (Binaries sind verfügbar für Linux, Mac OS X und Windows, SourceCode ebenfalls.)
 +
 
 +
Beispielcode ist in C und Python verfügbar. (Bitte entsprechend einen funktionierenden C-Compiler wie <code>gcc</code> oder eine entsprechende Python Installation einrichten.)
 +
 
 +
=== Empfohlene Auffrischung der mathematischen Kenntnisse ===
 +
Um der, nicht allzu komplexen, Mathematik im Workshop leichter folgen zu können, empfiehlt es sich die folgenden Themen der Mathematik wieder einmal grob zu überfliegen.
 +
[http://de.wikipedia.org/wiki/Grundrechenarten Grundrechnungsarten], [http://de.wikipedia.org/wiki/Modulo#Modulo Modulo Division] (Division mit Rest), [http://de.wikipedia.org/wiki/Skalar_(Mathematik) Skalar], [http://de.wikipedia.org/wiki/Vektor Vektor], [http://de.wikipedia.org/wiki/Matrizenrechnung Matrix] (''nicht'' [http://www.imdb.com/title/tt0133093/ diese Matrix]), [http://de.wikipedia.org/wiki/Lineare_Algebra Lineare Algebra] (Don't Panic!)
 +
 
 +
== Inhalt ==
 +
 
 +
=== Teil 1: Basics ===  
  
'''*** Der erste Workshop findet am 13.2.2010 um 16:00 statt.. ***'''
+
Der erste Teil behandelt folgende Inhalte (alles anhand von Beispiel-Programmen erklärt):
  
Wiederholung der Einführungsworkshops von [[Benutzer:Kyrah|kyrah]] Anfang 2010.
+
* Basics: SDL + OpenGL
 +
* Die Rendering-Pipeline
 +
* Parallelprojektion und perspektivische Projektion
 +
* Koordinatensysteme und 3D Transformationen
 +
* Verarbeitung von Tastatureingaben
 +
* einfaches Zeichnen in 3D
  
Bitte unverbindlich eintragen, wer daran interessiert wäre:
+
=== Teil 2 ===
  
# [[Benutzer:Michael|michael]]
+
* WH Grundlagen - Beispiel Sonnensystem durchbesprechen
# [[Benutzer:Michael|geo]]
+
* ''Needful things:''
# [[Benutzer:Pepi|Pepi]]
+
** Vollbildmodus
# georg k.
+
** bessere Tastatursteuerung
# alpi
+
** Animation
# [[Benutzer:00010111|Olaf]]
+
* Beleuchtung:  
# jürgen
+
** allgemeines
#[[Benutzer:Cypher|cypher]]
+
** Materialeigenschaften in OpenGL
#[[Benutzer:Tkolar|tkolar]]
+
** Lichtquellen in OpenGL (Arten, Farbangaben)
#[[Benutzer:Phantasus|Phantasus]]
+
 
#[[Benutzer:oib|oib]]
+
=== Teil 3 ===
#[[Benutzer:skrach|skrach]]
+
 
#[[Benutzer:queltos|queltos]]
+
* ???
#[[User:ra|ra]]
 
#[[User:amir|amir]]
 
#[[Benutzer:Bountin|Bountin]]
 
#[[User:steffi|steffi]]
 
#[[User:ylem235|ylem235]]
 
#[[User:Sekhmet|Sekhmet]]
 
#[[User:xcode|xcode]]
 
#[[User:snaut|snaut]]
 
#[[User:Damian|Damian]]
 
#[[User:Woodson|Woodson]]
 
#[[User:Vandebina|Vandebina]]
 
# ''your name here''
 
  
 
== Unterlagen ==
 
== Unterlagen ==
Zeile 39: Zeile 60:
 
=== Teil 1 ===
 
=== Teil 1 ===
  
* [http://kyrah.net/scratch/opengl/cg-intro-1.pdf Folien 1. Teil] (15.9.2007) – PDF, 1052kB
+
* [http://metalab.at/wiki/images/e/e1/CG-1.pdf Slides 1. Teil] (13.2.2010) – PDF, 1324kB
 +
 
 +
Die aktuelle Version der Sample Codes kannst Du auch per Subversion auschecken.
 +
 
 +
<code>svn co https://whatever.metalab.at/user/kyrah/opengl/workshops/ws1/</code>
 +
 
 +
(Das SSL Zertifikat ist self-signed und kann von svn daher nicht überprüft werden. Du solltest folgenden SHA1 Fingerprint präsentiert bekommen 44 9E 08 E4 56 5F 19 90 7C 77 10 A8 C9 8D D7 51 FA BA 63 3C)
  
 
''Beispiel-Code''
 
''Beispiel-Code''
# [https://whatever.metalab.at/user/kyrah/opengl/workshops/ws1/Makefile Makefile] Achtung, muss für euer System angepasst werden:
+
# [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>
 
## 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>
 
## 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/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
 
# [https://whatever.metalab.at/user/kyrah/opengl/workshops/ws1/triangle.cpp triangle.cpp] weißes Dreieck auf schwarzem Hintergrund
# Perspektive
+
# 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_ortho.cpp proj_ortho.cpp] orthographische Projektion
 
## [https://whatever.metalab.at/user/kyrah/opengl/workshops/ws1/proj_persp.cpp proj_persp.cpp] perspektivische Projektion
 
## [https://whatever.metalab.at/user/kyrah/opengl/workshops/ws1/proj_persp.cpp proj_persp.cpp] perspektivische Projektion
Zeile 56: Zeile 83:
 
# [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/tricolor.cpp tricolor.cpp] Dreieck in Farbe
 
# [https://whatever.metalab.at/user/kyrah/opengl/workshops/ws1/3ddrawing.cpp 3ddrawing.cpp] 3D-Aufgabe "Haus"
 
# [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 ===
 
=== 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''
+
* [http://metalab.at/wiki/images/1/17/CG-2.pdf Slides 2. Teil] (13.2.2010) PDF, 624 kB
# 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''
 
''Beispiel-Code''
  
# Review
+
1. '''Toolbox'''
##  [https://whatever.metalab.at/user/kyrah/opengl/workshops/ws3/solsys/solarsystem.cpp solarsystem.cpp] Musterlösung beleuchtetes Sonnensystem
+
# [https://whatever.metalab.at/user/kyrah/opengl/workshops/ws2/toolbox/tricolor_fullscreen.cpp tricolor_fullscreen.cpp] Vollbild-Modus
# Needful Things
+
# Animation
## [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/ws2/toolbox/animation_sleep.cpp animation_sleep.cpp] die triviale Methode
## [https://whatever.metalab.at/user/kyrah/opengl/workshops/ws3/animation/keyrepeat.cpp keyrepeat.cpp] verbesserte Tastatureingabe
+
#* [https://whatever.metalab.at/user/kyrah/opengl/workshops/ws2/toolbox/animation_timer.cpp animation_timer.cpp] oder mit Timer
## [https://whatever.metalab.at/user/kyrah/opengl/workshops/ws3/animation/tba.cpp tba.cpp] zeitbasierte Animation
+
# [https://whatever.metalab.at/user/kyrah/opengl/workshops/ws2/toolbox/3ddrawing_keyrepeat.cpp 3ddrawing_keyrepeat.cpp] besserer Keyboard-Input
# 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 ==
+
2. '''WH Sonnensystem''' (Schritt für Schritt aufgebaut)
* '''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])
+
# [https://whatever.metalab.at/user/kyrah/opengl/workshops/ws2/solsys/solarsystem1.cpp solarsystem1.cpp] Kugel zeichnen mit glu - Sonne
* '''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])
+
# [https://whatever.metalab.at/user/kyrah/opengl/workshops/ws2/solsys/solarsystem2.cpp solarsystem2.cpp] Sonne dreht sich um sich selbst
* '''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]]
+
# [https://whatever.metalab.at/user/kyrah/opengl/workshops/ws2/solsys/solarsystem3.cpp solarsystem3.cpp] Erde dreht sich um die Sonne
 +
# [https://whatever.metalab.at/user/kyrah/opengl/workshops/ws2/solsys/solarsystem4.cpp solarsystem4.cpp] Erde dreht sich auch um sich selbst
 +
# [https://whatever.metalab.at/user/kyrah/opengl/workshops/ws2/solsys/solarsystem5.cpp solarsystem5.cpp] Mond dreht sich um die Erde
 +
# [https://whatever.metalab.at/user/kyrah/opengl/workshops/ws2/solsys/solarsystem6.cpp solarsystem6.cpp] Ekliptik
  
== Misc. ==
+
3. '''Beleuchtung'''
* '''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.
+
* [https://whatever.metalab.at/user/kyrah/opengl/workshops/ws2/lighting/firstlight.cpp firstlight.cpp]
* [[Media:Solar_final2.cpp.txt|solar_final2.cpp.txt]] Musterlösung Sonnensystem
+
* [https://whatever.metalab.at/user/kyrah/opengl/workshops/ws2/lighting/materialcolour.cpp materialcolour.cpp]
* [[Media:Solar_final3.cpp.txt|solar_final3.cpp.txt]] Musterlösung Sonnensystem mit Kamera auf Planet
+
* [https://whatever.metalab.at/user/kyrah/opengl/workshops/ws2/lighting/lightcolour.cpp lightcolour.cpp]
* [http://www.opengl.org/resources/faq/technical/projection_abuse.php Help stamp out GL_PROJECTION abuse]; mehr zum thema GL_PROJECTION / gluLookAt
+
* [https://whatever.metalab.at/user/kyrah/opengl/workshops/ws2/lighting/components.cpp components.cpp]
* http://www.glprogramming.com/red/ - sehr praktischer guide
+
* [https://whatever.metalab.at/user/kyrah/opengl/workshops/ws2/lighting/movinglight.cpp movinglight.cpp]
  
Einige wichtige Anmerkungen zu den letzten Workshops:
+
== Weiterführende Literatur, Tutorials, etc. ==
  
=== Lichtquellen-Positionierung ===
+
* [http://www.glprogramming.com/red/ OpenGL Redbook] - *das* Buch zu OpenGL (''"OpenGL Programming Guide"'')
 +
* [http://www.xmission.com/~nate/tutors.html Nate Robins' Tutorials] - Demos zu Projektion, Transformationen, etc. (sehr zu empfehlen!)
 +
* [http://nehe.gamedev.net/ NEHE] - Eine der Standardquellen zu OpenGL Programmierung, keine gute Erklärungen dafür aber sehr viele Beispiele für alle möglichen Sprachen und Plattformen.
  
Die Position einer Lichtquelle wird bekanntlich wie folgt angegeben:
+
== Interessenten ==
  <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.
+
# [[Benutzer:Michael|michael]]
 
+
# [[Benutzer:Michael|geo]]
'''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.
+
# [[Benutzer:Pepi|Pepi]]
 
+
# georg k.
Beispiel 1: Licht kommt aus der Richtung 1, 1, 1 (Position ist "unenendlich weit entfernt").
+
# alpi
 
+
# [[Benutzer:00010111|Olaf]]
  <code>GLfloat light_position[] = { 1.0, 1.0, 1.0, 0.0 }; 
+
# jürgen
  glLightfv(GL_LIGHT0, GL_POSITION, light_position);</code>
+
#[[Benutzer:Cypher|cypher]]
 
+
#[[Benutzer:Tkolar|tkolar]]
Beispiel 2: Lichtquelle befindet sich am Punkt 0, 0, 0 (und scheint in alle Richtungen gleich stark).
+
#[[Benutzer:Phantasus|Phantasus]]
 
+
#[[Benutzer:oib|oib]]
  <code>GLfloat light_position[] = { 0.0, 0.0, 0.0, 1.0 }; 
+
#[[Benutzer:skrach|skrach]]
  glLightfv(GL_LIGHT0, GL_POSITION, light_position);</code>
+
#[[Benutzer:queltos|queltos]]
 
+
#[[User:ra|ra]]
Siehe zb. Musterlösung [https://whatever.metalab.at/user/kyrah/opengl/workshops/ws3/solsys/solarsystem.cpp beleuchtetes Sonnensystem].
+
#[[User:amir|amir]]
 
+
#[[Benutzer:Bountin|Bountin]]
=== V-Sync ===
+
#[[User:steffi|steffi]]
 
+
#[[User:ylem235|ylem235]]
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!)
+
#[[User:Sekhmet|Sekhmet]]
 
+
#[[User:xcode|xcode]]
Seit SDL 1.2.10 gibt es eine plattformunabhängige Möglichkeit, V-Sync zu aktivieren:
+
#[[User:snaut|snaut]]
 
+
#[[User:Damian|Damian]]
  <code>SDL_GL_SetAttribute(SDL_GL_SWAP_CONTROL, 1);</code>
+
#[[User:Woodson|Woodson]]
 +
#[[User:Vandebina|Vandebina]]
 +
# mephinet
 +
#[[User:Isis1984|Isis]]
 +
#[[User:RavuAlHemio|RavuAlHemio]]
 +
#[[User:kay|kay]]
 +
#[[User:Jüfe|Jüfe]]
 +
#[[User:merge|Martin]]
 +
# phaebz
 +
#[[User:cptwunderlich|Beni]]
 +
#[[User:Moep|moep]]
 +
#[[User:Leopold|leopold]]
 +
#[[User:mzeltner|mzeltner]]
 +
#[[User:ogott|ogott]]
 +
#[[User:Nex|nex]]
 +
# ''your name here''
  
Achtung, dieser Aufruf muss *vor* SDL_SetVideoMode(...) passieren!
+
== Archiv ==
  
''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]]
 

Aktuelle Version vom 23. Januar 2013, 13:29 Uhr

Einführung in Echtzeit-3D-Computergraphik mit OpenGL von كرا

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

Aktuelles

Übungsaufgabe: Beleuchtung in das 3D-Beispiel vom ersten Workshop (3ddrawing.cpp) einbauen. Wichtig: Normalvektoren angeben und auf korrekte Reihenfolge der Vertices [CCW cs. CW] achten!

Bei Interesse wird auch ein dritter Teil des Workshops stattfinden, der Termin wird auf der Mailingliste bekanntgegeben.

Voraussetzungen

Computergrafik

Es sind keine Computergraphik-Vorkenntnisse erforderlich.

Programmierung

Ihr solltet zumindest rudimentäre Programmierkenntnisse haben.

Mein Beispielcode ist in C, der Workshop macht aber durchaus nicht nur für C/C++-Hacker Sinn. Ihr könnt durchaus auch in Java oder Python oder Processing oder ... arbeiten, die Konzepte sind die gleichen. Für den Workshop ist es aber in jedem Fall von Vorteil, wenn ihr in der Lage seid, auf eurer Plattform ein C-Programm zu kompilieren und auszuführen, damit ihr die gezeigten Beispiele gleich live selber ausprobieren könnt.

Bitte dafür vor dem Workshop libSDL auf euren Rechnern installieren. (Binaries sind verfügbar für Linux, Mac OS X und Windows, SourceCode ebenfalls.)

Beispielcode ist in C und Python verfügbar. (Bitte entsprechend einen funktionierenden C-Compiler wie gcc oder eine entsprechende Python Installation einrichten.)

Empfohlene Auffrischung der mathematischen Kenntnisse

Um der, nicht allzu komplexen, Mathematik im Workshop leichter folgen zu können, empfiehlt es sich die folgenden Themen der Mathematik wieder einmal grob zu überfliegen. Grundrechnungsarten, Modulo Division (Division mit Rest), Skalar, Vektor, Matrix (nicht diese Matrix), Lineare Algebra (Don't Panic!)

Inhalt

Teil 1: Basics

Der erste Teil behandelt folgende Inhalte (alles anhand von Beispiel-Programmen erklärt):

  • Basics: SDL + OpenGL
  • Die Rendering-Pipeline
  • Parallelprojektion und perspektivische Projektion
  • Koordinatensysteme und 3D Transformationen
  • Verarbeitung von Tastatureingaben
  • einfaches Zeichnen in 3D

Teil 2

  • WH Grundlagen - Beispiel Sonnensystem durchbesprechen
  • Needful things:
    • Vollbildmodus
    • bessere Tastatursteuerung
    • Animation
  • Beleuchtung:
    • allgemeines
    • Materialeigenschaften in OpenGL
    • Lichtquellen in OpenGL (Arten, Farbangaben)

Teil 3

  • ???

Unterlagen

Teil 1

Die aktuelle Version der Sample Codes kannst Du auch per Subversion auschecken.

svn co https://whatever.metalab.at/user/kyrah/opengl/workshops/ws1/

(Das SSL Zertifikat ist self-signed und kann von svn daher nicht überprüft werden. Du solltest folgenden SHA1 Fingerprint präsentiert bekommen 44 9E 08 E4 56 5F 19 90 7C 77 10 A8 C9 8D D7 51 FA BA 63 3C)

Beispiel-Code

  1. Makefile Achtung, muss für euer System angepasst werden:
    1. Mac OS X mit SDL als framwork: CFLAGS = SDLMain.m und LIBS = -framework SDL -framework Cocoa -framework OpenGL
    2. Unix (inkl. Mac OS X mit SDL als .dylib): CFLAGS = `sdl-config --cflags` und LIBS = `sdl-config --libs` -lGL -lGLU
  2. basicsdl.cpp SDL "Rahmen-Applikation"
  3. triangle.cpp weißes Dreieck auf schwarzem Hintergrund
  4. Perspektive:
    1. proj_ortho.cpp orthographische Projektion
    2. proj_persp.cpp perspektivische Projektion
  5. 3 Varianten, ein Dreieck zu verschieben:
    1. transtri1.cpp Vertices modifizieren
    2. transtri2.cpp glTranslatef()
    3. transtri3.cpp Kamera-Position verändern
  6. tricolor.cpp Dreieck in Farbe
  7. 3ddrawing.cpp 3D-Aufgabe "Haus"

Teil 2

Beispiel-Code

1. Toolbox

  1. tricolor_fullscreen.cpp Vollbild-Modus
  2. Animation
  3. 3ddrawing_keyrepeat.cpp besserer Keyboard-Input

2. WH Sonnensystem (Schritt für Schritt aufgebaut)

  1. solarsystem1.cpp Kugel zeichnen mit glu - Sonne
  2. solarsystem2.cpp Sonne dreht sich um sich selbst
  3. solarsystem3.cpp Erde dreht sich um die Sonne
  4. solarsystem4.cpp Erde dreht sich auch um sich selbst
  5. solarsystem5.cpp Mond dreht sich um die Erde
  6. solarsystem6.cpp Ekliptik

3. Beleuchtung

Weiterführende Literatur, Tutorials, etc.

  • OpenGL Redbook - *das* Buch zu OpenGL ("OpenGL Programming Guide")
  • Nate Robins' Tutorials - Demos zu Projektion, Transformationen, etc. (sehr zu empfehlen!)
  • NEHE - Eine der Standardquellen zu OpenGL Programmierung, keine gute Erklärungen dafür aber sehr viele Beispiele für alle möglichen Sprachen und Plattformen.

Interessenten

  1. michael
  2. geo
  3. Pepi
  4. georg k.
  5. alpi
  6. Olaf
  7. jürgen
  8. cypher
  9. tkolar
  10. Phantasus
  11. oib
  12. skrach
  13. queltos
  14. ra
  15. amir
  16. Bountin
  17. steffi
  18. ylem235
  19. Sekhmet
  20. xcode
  21. snaut
  22. Damian
  23. Woodson
  24. Vandebina
  25. mephinet
  26. Isis
  27. RavuAlHemio
  28. kay
  29. Jüfe
  30. Martin
  31. phaebz
  32. Beni
  33. moep
  34. leopold
  35. mzeltner
  36. ogott
  37. nex
  38. your name here

Archiv

Workshop-Reihe 2007/2008


Push teh pixels!!