181 lines
5.7 KiB
Markdown
181 lines
5.7 KiB
Markdown
# Computer Grafik 1 - Gruppe Purple
|
|
|
|
## Mitglieder
|
|
```c
|
|
Luca {
|
|
Wresch,
|
|
Conte
|
|
};
|
|
Jonas {
|
|
Dillmann,
|
|
Niewidok
|
|
};
|
|
Finn {
|
|
Wolters
|
|
};
|
|
```
|
|
|
|
## Bauen, Starten und Bedienen des Programms
|
|
```
|
|
$ cd src
|
|
$ make run
|
|
```
|
|
|
|
Bedienung über Keyboard :D
|
|
- 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 Objekt 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 Zwei fliegenden Würfel befinden sich zur Veranschaulichung an den Positionen dieser Lichtquellen
|
|
- 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
|
|
- Alle Objekte der Szene wurden in Blender erstellt und importiert
|
|
- Texturen der Objekte wurden aus dem Internet Importiert, selbst erstellt, oder bestehen aus realen Fotos
|
|
- Alle Objekte wurden einzeln UV-Mapped (ist eine ziemliche Drecksarbeit) - dazu wurden außerdem teilweise Texturen gemerged, damit besseres UV-Mapping möglich war
|
|
- Bis auf wenige Ausnahmen wurden alle Objekte möglichst Wahrheitsgetreu modelliert und haben einen 1:1 Maßstab
|
|
- Die Stuhlreihen wurde einfachheitshalber nicht wie im Vorlesungssaal gekrümmt sondern sind gerade dargestellt.
|
|
|
|
## TODO LIST
|
|
|
|
- [X] README-Datei mit Informationen zum Bauen, zum Starten und zur Bedienung des
|
|
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
|
|
- [X] Animation der Kamera und/oder eines Objekts
|
|
- [X] Beleuchtung der Szene, wie in der Vorlesung beschrieben
|
|
- [X] Texturierung von mindestens einem Objekt
|
|
|
|
Wenn ihr nicht nur bestehen sondern auch eine gute Note bekommen möchtet, müsst ihr auch
|
|
möglichst viele der folgenden Anforderungen erfüllen:
|
|
|
|
- [X] Import von Geometriedaten aus separaten Dateien
|
|
- [X] sinnvolle Aufteilung des Codes auf mehrere Dateien (insb. Shader-Code in separaten
|
|
Dateien)
|
|
- [X] Datentypen und Hilfsfunktionen für Shader, Geometriedaten, Texturen
|
|
- [X] Überprüfung übergebener Funktionsparameter durch Assertions (soweit möglich)
|
|
- [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)
|
|
- [X] Beleuchtung der Szene mit mehr als einer Lichtquelle
|
|
- [X] gleichzeitige Verwendung von mindestens zwei Texturen in einem Objekt
|
|
- [X] gleichzeitige Verwendung von mindestens zwei verschiedenen Shader-Programmen in einer Szene
|
|
- [ ] transparente Objekte
|
|
- [X] Verwendung einer Umgebungstextur
|
|
- [?] Spiegelung der Umgebungstextur auf einigen Objekten
|
|
- [ ] Nebel in einer komplexen 3D-Szene
|
|
|
|
Für eine besonders gute Note ist die Umsetzung mindestens einer fortgeschrittenen Technik
|
|
erforderlich, die nicht in der obigen Liste genannt wird und für die ihr die notwendigen Details
|
|
selbst recherchieren müsst.
|
|
|
|
Weitere Bewertungskriterien sind Code-Qualität, Projektidee und Ästhetik. |