CG 2/3 bungen, SS 2002
Abschnitt Nr. 3
Weislein, Katharina, 881, 9725013, katharina@cg.tuwien.ac.at
Steiner, Martin, 881, 8726633, martin.steiner1@chello.at



Kurzbeschreibung
================

Der bse Drache Maug hat Teng zusammen mit seinem Pferd in ein Labyrinth
eingeschlossen. Maug lt die beigen erst wieder frei, wenn mindestens 
4 Diamanten eingesammelt sind. Erst wenn Teng und Pferd mit den Diamanten
beim Tor stehen, ffnet sich das Labyrinth und das Spiel ist zu Ende.






Steuerung
=========

Im Intro: 

<ENTER>:      fr nchste Seite
<ESC>:        Abbruch
<f>:          Umschaltung zwischen Vollbild und Fenster Ansicht.
<LEERTASTE>:  Pause 


Beim Spiel:

Maus:         Drehung das Blickwinkels
Linke 
Maustaste:    SChieen
Cursortasten: Bewegung von Tengg
<BILD AUF>:   Teng geht in Richtung Pferd, solange Taste gedrckt ist
<BILD Ab>:    Pferd geht in Richtung Teng, solange Taste gedrckt ist
<POS 1>:      Pferd und Teng gehen in Richtung Ausgang, solange 
              Taste gedrckt ist
<ESC>:        Abbruch
<F1>:	      Setup Fenster
<F9>,<F10>:   Field of View verstellen
<f>:          Umschaltung zwischen Vollbild und Fenster Ansicht.
<i>:          FPS einblenden
<t>:          Texturmodus zwischen No, Linear und MipMaps umschalten
<s>:          Shading zwischen Wireframe, Flat und Smooth
<o>:          Portal Mapping 
<b>:          backface Culling
<L/l>:        LOD verndern  
<D>:          statische LOD einschalten
<p>:          Pause
<B>:          Boss Key 
<LEERTASTE>:  Schieen 








Datenstrukturen
===============

Das Labyrinth ist ein 2 Dimensionales Character Array. Es wird gespeichert, 
ob auf den Rasterfeld eine Wand, Gang oder ein Objekt ist. Die Wnde werden 
nicht gespeichert sondern ergeben sich durch den bergang von Wand zu Gang.
Das Labyrinth wird automatisch generiert.

Die Objekte ( Lampen, Strohballen und lkannen ) sind in Arrays gespeichert. 
Position, alte Position, Orientierung, zurckgelegter Weg und quadrierter 
Radius einer Bounding Sphere sind gespeichert.
Die Objekte werden ebenfalls zufllig in das Labyrinth gestellt, wobei ein
von der Bounding Sphere abhngiger Abstand zur Wand eingehalten wird. Weiters
darf in jedem Rasterfeld nur ein Objekt stehen. Damit werden berschneidungen
ausgeschlossen.




Objekte
=======



Wand, Decke, Boden und Tor
--------------------------

Je nach Detailgrad, bestehen sie aus aus 1 bis 1024 Quads oder Dreicken. Wird als 
eine Boundary Represenateion abgebildet, die aus einem Quad durch subdivision erzeugt
wird. 



lkanne, Strohballen, Diamanten, Spinnen
----------------------------------------

Aus einer kompakten Representation von Pyramidenstmpfen, die ber ein File
eingelesen wird, werden durc Doo Sabin Subdivision Objekte mit mehr Polygonen und
glatten bergngen erzeugt. 


Sttzbalken
-----------
Aus konvexen Objekten zusammengesetzt.


Pferd
-----
Aus 6 Display Lists zusammengesetzt, durch Tesselierung aus Vertex Arrays 
erstellt.



Teng
----
Nicht modelliert, da alles aus Sicht von Teng geschieht.



Effekte
=======

Im Folgenden werden die Features beschrieben.


Zeit
----

Alle Effekte wurden so implementiert, da sie auf allen Rechnern, die eine Framerate
von ber 5 FPS haben, gleich schnell ablaufen, auf langsamen Modellen aber "ruckeln".


Einblenden, Ausblenden
----------------------
Ein schwarzer Quad, der den gesamten Viewport ausfllt, wird zuletzt mit einer
Orthographischen Projektion ber das Bild gelegt. Mit Blending wird der Effekt erzielt.


Schrift
-------

Da die OpenGL Standardschriften nicht passend sind, haben wir 2 Schriften 
implementiert. Aus einem TGA File, das die Buchstaben des Alphabets der 
Reihe nach beeinhaltet, wird mit OCR - like Routinen ein Quadratisches Texturfile 
erzeugt. Beim Insitialisieren kann die Schriftart gewhlt werden.


Beleuchtung
-----

Die im Takt des Schritts wackelnde Lampe wird durch eine bewegte Lichtquelle simuliert.



Billboards
----------

Die Explosionen, wenn ein Pfeil auf die Wand trifft, sind durch Billboards mit 
8 Texturen implementiert.


Transparenz
-----------

Die Diamanten sind Transparent. Werten zuletzt gezeichnet und die geeigent 
Blendfunktion erzeugt den Effekt.



Stencil Buffer
--------------

Um das Spielfeld ist ein Rahmen gelegt. Aus einem RGB Bitmap wird ein Alpha Farb-
anteil berechnet. 



Scissor Checks
--------------

Die Landkarte liegt ber der Scene. Durch Abschalten des Depth Testes und einen Scissor-
Breich wird der Effekt erzielt.




Optimierungen bei der Initialisierung
=====================================

Da die Auflsung Parametrisierbsr ist, mssen die Bitmaps skaliert werden. Da viele
Bitmaps vorkommen, duert das mehrere Sekunden. Um das zu beschleunigen, haben speichern
wir die Bitmaps optional in der richtigen Auflsung ab.

Das Erzeugen der Boundary Representations fr die 5 Level of Details dauert sehr 15 Minuten.
Um das zu beschleunigen, werden die BReps, in Dateien gespeichert.


Optimierungen zur Laufzeit
==========================

Display Lists
statisches LOD
Details einstellbar
Backface Cullung
Portal Rendering
Bounding Spheres