Anforderungen
- Der umgebende Raum soll mindestens einen Fußboden und Wände enthalten, durch die man nicht durchgehen kann
- mindestens der Fußboden und die Wände sollen eine Textur erhalten (entweder eine selbst erstellte oder aus einem Grafik-File geladene)
- irgendwo in der Szene soll sich zusätzlich ein mit Hilfe mathematischer Funktionen erstellter beleuchteter Rotationskörper (krummlinig) befinden
- die Szene soll eine lokale Beleuchtung erhalten und sowohl diffuse als auch spiegelnde Reflexion enthalten
- überlegen Sie sich mehrere einigermaßen komplizierte polygonal begrenzte Körper, die sich in der Szene befinden und von Hand programmiert sein sollen – also keine Glut/GLU-Objekte
Überlegungen
- wir verzichten komplett auf Glut-/GLU-Objekte, um umerwünschte Nebeneffekte zu vermeiden
Funktion für einen Würfel, aus dem alle eckigen Objekte gebaut werden: void drawCube(Position corner, float _x, float _y, float _z, char* shownSides); corner: x-/y-/z-Koordinaten (Klasse Position) _x, _y, _z: Länge (Pixel) der jeweiligen Seite shownSides: Anfangsbuchstaben der Seiten des Würfels, die angezeigt werden sollen (vorne, hinten, links, rechts, oben, unten)
- für die Bewegung im Raum bieten sich zwei Konzepte an:
- glTranslatef und gluLookAt
Das Konzept war unzuverlässig, weil die Ansicht um die Y-Achse des Betrachters drehbar sein sollte. Die Kombination der Koordinaten aus dem Standort der Kamera und der Blickrichtung ergab sehr kleine Zahlen und machte somit ein Navigieren nach wenigen Drehungen unmöglich.
- glTranslatef und glRotatef
Deutlich zuverlässiger. Der Blickwinkel ist unabhängig von der Blickrichtung, die Blickrichtung wird nicht mehr mit Koordinaten, sondern ebenfalls mit einem Winkel (auf der X-Achse des Betrachters) berechnet.
- Tastaturbewegung
mit den Cursortasten kann der aktuelle Standpunkt in x- und z-Richtung verändert werden (y-Richtung hieße, der Betrachter könne fliegen. Das haben wir für eine automatisch generierte Tour durch unsere Welt und Wartungsarbeiten am Dach mittels Bildhoch-/Bildrunter-Taste ermöglicht)
- Mausbewegung
das Konzept kennt man von sogenannten Ego-Shootern: Mit der Maus kann die Blick- und Laufrichtung verändert werden.
Umsetzung
Das Programm wurde in C++ geschrieben. Wenige kleine Fehler sind noch vorhanden, aber das meiste funktioniert. Der Quellcode ist überaus simpel gehalten (kein Szenegraph, auf die Möglichkeiten der objektorientierten Programmierung wird nur rudimentär eingegangen).Zum Download stehen bereit:
Einleitung
Windows-Version
|