diff --git a/README.md b/README.md index 62de481..f1074b6 100644 --- a/README.md +++ b/README.md @@ -22,15 +22,122 @@ $ make run ``` Bedienung über Keyboard :D - - WASD - - R & F für Hoch & Runter + - WASD für freie Kamerabewegung + - R & F oder Shift + Leertaste: Kamera Hoch & Runter bewegen - 1,2,3,4,5,6 für Verschiedene Kamerapositionen - 1: Vor den Tafeln - 2-4: Verschiedene Sitzplätze - 5: Vogelperspektive - 6: Close-Up vom Normal Map Demo Cube + - X & C: Tafel Hoch & Runter schieben + - ESC: Programm schließen +## weitere Infos + + - Alle Objekte werden durch eine Scene Graph Datei (.scg) mit selbst entwickelter Syntax definiert und platziert. + +Erklärung der Scene Graph Syntax: +``` +# Mit einem # beginnende Zeilen sind Kommentare + +# Definition eines Models +# Jedem Model muss eine einzigartige ID gegeben werden +model 0 + +# Angabe der OBJ Datei, aus der die Modelldaten eingelesen werden +# Alle Dateipfade sollten absolut sein oder ralativ zum working directory +file myObjFile.obj + +# Angabe einer Textur Datei +texture myTexture.jpg + +# Angabe einer zweiten Textur Datei. Diese wird über die erste gelegt +texture2 mySecondTexture.png + +# Angabe einer Normal Map +normal myNormalMap.png + +# Angabe des Shininess Wertes des Models +shininess 10.0 + + +# Objekte sind Scene Graph Nodes. +# Auch sie brauchen eine einzigartige ID +# Diese ID muss nur unter den Objekten einzigartig sein +# Ein Objekt kann also die selbe ID haben wie ein Model +obj 102 + +# Angabe des Modells, das das Objekt nutzt. +# Diese Angabe ist optional. Sie kann weggelassen werden, wenn es sich z.B. um ein Group Objekt handelt +# Hier wird die vorher gesetzte Model ID referenziert +use 0 + +# Angabe des Parent Nodes mittels Objekt ID +# Diese Angabe ist optional. Wenn kein Parent Node angegeben ist, wird automatisch der root node (ID: -1) als parent gesetzt +parent 101 + +# Angabe eines Namen +# Optional. Kann im Code verwendet werden um den Scene Graph nach diesem Objekt zu durchsuchen. +# Für diesen Zweck kann aber auch die Obejekt ID genutzt werden. +# Beim Printen des Scene Graph (s. Konsolenausgabe bei Programmstart) wird der Name geprintet +# Ist keine Name gesetzt, wird stattdessen die Objekt ID geprintet +name MeinObjekt + + +# Transformationen +# Die Transformationen werden in der Reihenfolge ausgeführt, in der sie angegeben wurden +# Transformationen propagieren auf jegliche Child Elemente weiter +translate 1.0 0.0 0.0 +scale 1.0 1.5 0.5 +rotateX 1.0 +rotateY 3.141 +rotateZ 0.1 + + +# Beispiel + +model 0 +file sphere.obj +texture sun.jpg + +model 1 +file sphere.obj +texture earth.png + +model 2 +file sphere.obj +texture moon.png +normal moon-normal.png + +obj 0 +name Sonnensystem + +obj 1 +use 0 +name Sonne +parent 0 +scale 2.0 2.0 2.0 + +obj 2 +use 1 +name Erde +parent 0 +translate 5.0 0.0 0.0 + +obj 3 +use 2 +name Mond +parent 2 +scale 0.2 0.2 0.2 +translate 0.0 0.0 2.0 + +``` + + - es befinden sich zwei Punkt-Lichtquellen im Raum die sich langsam im Kreis umeinander drehen + - Die Box neben dem Lehrerpult ist dort um Normal Maps zu demonstrieren. 6 Drücken für Close-Up Ansicht. Am besten ist der Effekt in der Spekularreflektion sichtbar. Einfach kurz warten bis das Lich im richtigen Winkel darüber fliegt + - Die Tafeln nutzen 2 übereinandergelegte Texturen: Eine für die Tafel selbst, und eine für den darauf geschriebenen Text + ## TODO LIST - [X] README-Datei mit Informationen zum Bauen, zum Starten und zur Bedienung des @@ -38,7 +145,7 @@ Programms - [X] Matrixfunktionen zur Umsetzung der benötigten Transformationen (Verschiebung, Drehung, Skalierung, Position und Orientierung der Kamera, Perspektivprojektion, Normalenmatrix) - [X] mehrere Objekte in einer 3D-Szene -- [?] Animation der Kamera und/oder eines Objekts +- [X] Animation der Kamera und/oder eines Objekts - [X] Beleuchtung der Szene, wie in der Vorlesung beschrieben - [X] Texturierung von mindestens einem Objekt @@ -53,8 +160,8 @@ Dateien) - [X] Tests für alle Matrixfunktionen - [x] Strukturierung der Szene durch einen einfachen Szenengraph - [X] einfache Benutzerinteraktion mit Kamera und/oder Objekten (z. B. über Tastatur) -- [?] Beleuchtung der Szene mit mehr als einer Lichtquelle -- [?] gleichzeitige Verwendung von mindestens zwei Texturen in einem Objekt +- [X] Beleuchtung der Szene mit mehr als einer Lichtquelle +- [X] gleichzeitige Verwendung von mindestens zwei Texturen in einem Objekt - [?] gleichzeitige Verwendung von mindestens zwei verschiedenen Shader-Programmen in einer Szene - [ ] transparente Objekte - [?] Verwendung einer Umgebungstextur