CG 2/3 UEBUNGEN, SS 2004
Abschnitt Nr. 2004
Wagner, Armin, 881, e9726132@stud3.tuwien.ac.at

ATTENDANT



Datenstrukturen:
================

Ich habe mich dafür entschlossen die Levelarchitektur (Wände, Boden, Decke) und die benutzbaren
Objekte (Schlüssel usw.) getrennt zu verarbeiten. Letztere werden durch Dreiecke dargestellt und
in der Datei thing.cpp und thing.h näher beschrieben.
Für die Speicherung der Architektur benutze ich vorrübergehend noch ein eigenes Dateiformat.
In einer einfachem TXT Dateie definieren jeweils die ersten drei Zahlen einer Zeile ein Vertex,
die letzteren zwei die Texturkoordinaten. Momentan werden sämtliche so gespeicherten Daten in
Vertex Arrays eingelesen und als QUADs interpretiert.
Implementiert wurde dies durch die Klasse "LevelPart", bzw. in den Dateien level.cpp, level.h
sowie der Hauptdatei attendant.cpp. Für den dritten Abschnitt ist selbstverständlich ein
komplexeres Format geplant, das die Bearbeitung mit 3D Software erlaubt und Sektoreinteilung ermöglicht.


Entwurf eines Kameramodells:
============================

Die Klasse "Camera" ermöglicht durch Zusammenspiel mit "gluLookAt" eine bewegbare Kamera.
Das Spiel soll in der FirstPersonPerspective gespielt werden, deshalb habe ich den dafür
inzwischen typischen Mouselook implementiert sowie Vorwärts-, Rückwärtsbewegungen und Strafing,
die mittels Tastatur (dafür bitte die Tasten adsw benutzen) gehandhabt werden.
Um die Berechnungen in der Klasse "Camera", sowie auch anderswo, übersichtlicher zu gestalten,
habe ich die Klasse "myVector" geschrieben.


Implementierung von Texture Mapping:
====================================

Die Klasse "ImageLoader" kann unkomprimierte 24bit TGA Bilder laden und für
den Gebrauch vorbereiten. Die von der Klasse "LevelPart" eingelesen Texturkoordinaten
werden dann in der Funktion "displayFcn" gezeichnet.
Vertex Arrays werden zwar erst in Abgabe 3 explizit verlangt, ich habe diese aber aus Performancegründen
(mein Computer ist >etwas< langsam) schon jetzt eingefügt und damit experimentiert.
Texturiert wurden Wände, Decke und Boden, vorerst nur zwei verschiedene, kleine und etwas "trashige"
Texturen.


Beleuchtung und Materialien:
============================

Ein "Thing" kann aus mehreren "ThingParts" bestehen, die sich jeweils aus Dreiecken und einem Material zusammensetzen.
Die Lichtquelle befindet sich in einer oberen Ecke des Raumes.


Sonstige Anforderungen:
=======================

Die Steuerung wurde durch Polling realisiert.
Die Geschwindigkeit wird durch Klasse "Framerater" auf die Performance angepasst.
Verwendete zusätzliche Libraries: GLUT.


Walkthrough:
============

Das Spiel wird ein Adventure in First Person Perspective. Der Ort der Handlung ist eine Art Hallenbad.
Bitte per Mouselook umdrehen und den kurzen Gang entlang in den beleuchteten Raum gehen.
Dort liegt in der rechten Ecke ein Schluessel (eine sich drehende Pyramide). Diesen einsammeln, indem
man einfach ueber drueber laeuft. Danach den Gang zurück zur Steinwand laufen und man hat es geschafft und
das Spiel ist zuende. (Dies ist zugegeben noch kein besonders "knackiges" Rätsel, aber ein Grundbaustein
für wohl jedes Adventure. Mehr kommt in Abgabe 3.)
Per ESC-Taste ist ein Ausstieg jederzeit moeglich.
Die i-Taste gibt einige debug-Informationen auf das Konsolen Fenster aus.

