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
(einige wichtige Anmerkungen (bitte lesen!))
K (→‎Teil 3: Timer-Beispiele entfernt (nicht gemacht))
Zeile 90: Zeile 90:
 
## [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/keyrepeat.cpp keyrepeat.cpp] verbesserte Tastatureingabe
 
## [https://whatever.metalab.at/user/kyrah/opengl/workshops/ws3/animation/tba.cpp tba.cpp] zeitbasierte Animation
 
## [https://whatever.metalab.at/user/kyrah/opengl/workshops/ws3/animation/tba.cpp tba.cpp] zeitbasierte Animation
## [https://whatever.metalab.at/user/kyrah/opengl/workshops/ws3/animation/timer.cpp timer.cpp] Animation mit Timer
 
## [https://whatever.metalab.at/user/kyrah/opengl/workshops/ws3/animation/timer-waitevent.cpp timer-waitevent.cpp] Animation mit Timer und SDL_WaitEvent()
 
 
# Texturen
 
# 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/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

Version vom 9. Februar 2008, 18:30 Uhr

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

Aktuell

Einige wichtige Anmerkungen zu den letzten Workshops:

Lichtquellen-Positionierung

Die Position einer Lichtquelle wird bekanntlich wie folgt angegeben:

 GLfloat light_position[] = { 1.0, 1.0, 1.0, 0.0 };  
 glLightfv(GL_LIGHT0, GL_POSITION, light_position);

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").

 GLfloat light_position[] = { 1.0, 1.0, 1.0, 0.0 };  
 glLightfv(GL_LIGHT0, GL_POSITION, light_position);

Beispiel 2: Lichtquelle befindet sich am Punkt 0, 0, 0 (und scheint in alle Richtungen gleich stark).

 GLfloat light_position[] = { 0.0, 0.0, 0.0, 1.0 };  
 glLightfv(GL_LIGHT0, GL_POSITION, light_position);

Siehe zb. Musterlösung 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 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:

 SDL_GL_SetAttribute(SDL_GL_SWAP_CONTROL, 1);

Achtung, dieser Aufruf muss *vor* SDL_SetVideoMode(...) passieren!

Leider scheint diese Funktionalität aber unter Linux mit ATI-Treiber nicht zu funktionieren... (?)

Unterlagen

Teil 1

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"
  8. "Hausaufgabe"
    1. solarsystem.cpp Musterlösung Sonnensystem
    2. siehe auch Max' geniale Variante mit Perspektive vom Planeten aus: solar_final3.cpp.txt

Teil 2

Beispiel-Code

  1. Review
    1. review.cpp Wiederholung: Grundlagen
  2. Beleuchtung
    1. firstlight.cpp einfache Lichtquelle
    2. materialcolour.cpp Materialfarben
    3. components.cpp Materialkomponenten (ambient/diffuse/specular)
    4. lightcolour.cpp Lichtfarben
    5. movinglight.cpp bewegte Lichtquelle
    6. house.cpp das "Haus" vom 1. Workshop mit Beleuchtung

Teil 3

Beispiel-Code

  1. Review
    1. solarsystem.cpp Musterlösung beleuchtetes Sonnensystem
  2. Needful Things
    1. tricolor_fullscreen.cpp Vollbild-Modus
    2. keyrepeat.cpp verbesserte Tastatureingabe
    3. tba.cpp zeitbasierte Animation
  3. Texturen
    1. texturing.cpp Texture.h Texture.cpp Makefile crate.png Einführungsbeispiel zur Texturierung
    2. texturing.cpp Image.h Image.cpp Makefile crate.png Einführungsbeispiel ohne Abstraktion (more hardcore)


Misc.

Kontakt

Wünsche, Anregungen, Beschwerden, Patches, etc. bitte an kyrah.

Push teh pixels!!