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
K (hat Computergraphik-Einfuehrung nach CGSG/Workshop verschoben: OpenGL Einführung ist eine Veranstaltung der CGSG)
(alte Workshop-Seite archiviert)
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]]

Version vom 29. Januar 2010, 21:15 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

Der erste Workshop findet am 13.2.2010 um 16:00 statt.

Unterlagen

(coming soon)

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. your name here

Archiv

Workshop-Reihe 2007/2008


Push teh pixels!!