Zum Inhalt springen

CGSG/Workshop: Unterschied zwischen den Versionen

Kyrah (Diskussion | Beiträge)
Teil 3: Sample-Code aktualisiert
Kyrah (Diskussion | Beiträge)
einige wichtige Anmerkungen (bitte lesen!)
Zeile 1: Zeile 1:
'''''[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]]


== Nächster Termin ==
== Aktuell ==


'''Samstag, 9. Februar, 16:00'''
Einige wichtige Anmerkungen zu den letzten Workshops:


Inhalt: Texturen, Framerate-unabhängige Animation,...
=== 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... (?)''


== Unterlagen ==
== Unterlagen ==
Zeile 51: Zeile 83:


''Beispiel-Code''
''Beispiel-Code''
# Review
##  [https://whatever.metalab.at/user/kyrah/opengl/workshops/ws3/solsys/solarsystem.cpp solarsystem.cpp] Musterlösung beleuchtetes Sonnensystem
# Needful Things
# 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/tricolor_fullscreen.cpp tricolor_fullscreen.cpp] Vollbild-Modus
Zeile 80: Zeile 115:
* http://www.glprogramming.com/red/ - sehr praktischer guide
* http://www.glprogramming.com/red/ - sehr praktischer guide


== Kontakt ==
Wünsche, Anregungen, Beschwerden, Patches, etc. bitte an  [[Benutzer:Kyrah|kyrah]].
'''Push teh pixels!!'''


[[Kategorie:Workshops]]
[[Kategorie:Workshops]]