2.3. Software für X3D – Bildschirme

Werbung
Fach: Systemprogrammierung
Name: Stefan Kraus
Matr.Nr.: XXXXXX
E-Mail: [email protected]
Thema: Entwicklung von zwei Echtzeit - Animationen unter OpenGL und DirectX™ für X3D - Systeme
Inhaltsverzeichnis
WICHTIGER HINWEIS ........................................................................................................ 2
1. Einleitung .............................................................................................................................. 3
1.1.Voraussetzungen .................................................................................................................. 4
1.1.1. Hardware Voraussetzungen .............................................................................................. 4
1.1.2. Software Voraussetzungen ............................................................................................... 4
2. X3D – Bildschirme ............................................................................................................... 5
2.1. Grundlegendes ..................................................................................................................... 5
2.1.1. Was sind X3D - Bildschirme? .......................................................................................... 6
2.1.2. Was sind deren Anwendungsgebiete? .............................................................................. 9
2.2. Die Tiefen der X3D – Technologie ................................................................................... 10
2.2.1. Aufbau und Funktionsweise ........................................................................................... 10
2.2.2. Die Entstehung von räumlicher Tiefe ............................................................................ 12
2.3. Software für X3D – Bildschirme ...................................................................................... 12
2.3.1. X3D – Tools ................................................................................................................... 13
2.3.2. X3D – Media Player ....................................................................................................... 16
2.3.3. X3D - 3D Studio Plugin ................................................................................................. 17
2.3.4. X3D – OpenGL Enhancer .............................................................................................. 18
2.3.5. More3D DirectX™ Stereo Driver .................................................................................. 19
2.4. Die Programmierung ......................................................................................................... 21
2.4.1. Was ist zu berücksichtigen ............................................................................................. 21
2.4.2. Eine Frage der Performance ........................................................................................... 22
3. DirectX™ - Demo ............................................................................................................... 23
3.1. Einleitung .......................................................................................................................... 23
3.1.1. Was wurde gemacht? ..................................................................................................... 23
3.1.2. Was war geplant? ........................................................................................................... 23
3.1.3. Szenen-Überblick ........................................................................................................... 24
3.1.4. Verwendete Werkzeuge ................................................................................................. 25
3.2. Die ViperEngine ................................................................................................................ 28
3.2.1. Eine knappe Einführung ................................................................................................. 29
3.3. Aufbau der DirectX™ - Demo .......................................................................................... 30
3.3.1. Das Klassendiagramm .................................................................................................... 30
3.3.2. Das Zusammenspiel ....................................................................................................... 31
3.4. Problemstellungen ............................................................................................................ 32
3.4.1. Synchronisation .............................................................................................................. 32
4.0 OpenGL – Demo ............................................................................................................... 34
4.1. Einleitung .......................................................................................................................... 34
4.1.1. Was wurde gemacht? ..................................................................................................... 34
4.1.2. Was war geplant? ........................................................................................................... 34
4.1.3. Szenen-Überblick ........................................................................................................... 35
4.1.4. Verwendete Werkzeuge ................................................................................................. 35
4.3. Aufbau OpenGL - Demo ................................................................................................... 36
4.3.1. Funktionsübersicht ......................................................................................................... 36
4.3.2. Das Zusammenspiel ....................................................................................................... 37
5. Aufwand .............................................................................................................................. 38
6. Fazit ..................................................................................................................................... 39
7. Quellen................................................................................................................................. 40
Seite: 141
WICHTIGER HINWEIS
Das Projekt wurde entgegen der Vereinbarungen bearbeitet!
Mein Team-Kollege, mit dem ich das Projekt machen sollte, hatte während der gesamten Zeit
nichts (!!!) zur Realisierung beigetragen, mich jedoch stets im Glauben gelassen, dass diverse
Arbeiten bereits fertig wären, er aber diese noch weiter ausbauen würde. Recherche und
Einarbeitung in die X3D-Systeme erfolgte nur durch mich (Stefan Kraus), das gleiche gilt
auch für die Entwicklung der beiden Echtzeit-Animationen. Der von uns abgegebene ProjektAntrag weicht daher von der tatsächlich getätigten Arbeit ab. Ein Client und Server wurden
nicht programmiert, da diese in den Aufgabenbereich meines Team-Kollegen fielen. Ich habe
mir sehr viel mühe gegeben, dennoch soweit wie möglich alle geforderten Teile des Projektes
ordentlich zu erfüllen.
Ich habe nicht nur meinen Teil komplett erfüllt, sondern zusätzlich noch Teile meines
Team-Kollegen!
Über dieses Problem hatte ich ja bereits mit Herrn Heinzel gesprochen und er hatte sich die
einzelnen Teile bereits auf dem Projektantrag notiert (es sind jedoch weitere
dazugekommen!).
Ebenfalls hatte ich die Erlaubnis die, für die Dokumentation, maximal erlaubte Seitenzeil zu
überschreiten. Jedoch hatten Herr Heinzel und ich uns nicht darüber geeinigt wie diese Zahl
auszusehen hat. Ich hoffe im Rahmen geblieben zu sein, und bitte um Verständnis, da zum
einen das Thema sehr komplex war und zum anderen, da ich doppelte Arbeit leisten musste!
Weiterhin möchte ich darauf hinweisen, dass mein Teamkollege bis heute kein Wort über den
Ausstieg verloren hat. Seine letzten Worte waren: „Du schaffst das schon, Stefan“. Er hatte
mir zugesichert, dass er mir die fehlenden OpenGL-Scenen bis zum Abgabetermin zukommen
lassen würde. Ebenso wollte er sich in die X3D-System einarbeiten um bei deren
Dokumentation ebenfalls mitwirken zu können. Soweit ist es aber nicht gekommen. Ich habe
bis zum 30.12.2004 auf Resultate gewartet, leider vergeblich. Die OpenGL Demo entstand
unter extremen Zeitdruck, was dazu geführt hat, dass diese Qualitativ gesehen, Dimensionen
hinter der DirectX-Demo liegt. Auf Musik musste ich sogar ganz und gar verzichten, da eine
Synchronisation innerhalb weniger Tage nicht machbar war, zumal das Programmieren der
einzelnen Szenen, dank Teamkollege, noch nicht einmal stattgefunden hatte.
Ich hoffe, dass dieser Umstand bei der Benotung berücksichtigt wird.
1. Einleitung
Die X3D-Systeme von Opticality sind für Multimediale Anwendungen der Durchbruch in die
dritte Dimension. Es ist nun auch für den End-Benutzer zum ersten male möglich Filme,
Computerspiele und alle anderen Formen der Multimedialen Unterhaltung in 3D zu genießen.
Das 2D Bild des Monitors wird nun vollständig 3D. Filme erhalten eine bisher noch nicht
gekannte Faszination, nämlich die der dritten Dimension. Objekte, Figuren, alles hat eine nie
dagewesene Tiefe, die scheinbar zum greifen nah ist. Computerspiele werden uns noch mehr
in ihren Bann ziehen, uns noch realer und noch fantastischer erscheinen. Die X3D-Systeme
läuten eine neue Ära des Multimedialen Zeitalters ein und öffnen somit neue Möglichkeiten
der Multimedialen Unterhaltung.
Wir werden uns in den folgenden Kapiteln diese Bildschirme genauer unter die Lupe nehmen.
Wir werden erfahren, wie sie funktionieren, wofür man sie alles einsetzen kann, und wie man
sogar eigene 3D-Anwendungen für sie entwickeln kann. Die Vielfalt ist recht groß und bei
weitem noch nicht vollkommen ausgeschöpft. Wir werden auch erfahren, welchen Problemen
diese neue Technologie gegenübersteht und was uns in Zukunft noch alles erwarten wird.
Ich für meinen Teil bin jedenfalls sehr gespannt und aufgeregt. Begleiten Sie mich in eine
Welt, die noch nie ein Mensch zuvor gesehen hat. Eine Welt die Ihren Atem zum stocken
bringen wird. Eine Welt in der Phantasie und Realität verschmelzen werden.
Willkommen in der dritten Dimension
„Faszinierend“
Spok, Star Trek TOS
1.1. Voraussetzungen
Um überhaupt in den Genuss dieser neuen Technik kommen zu können muss man bestimmte
Voraussetzungen sowohl auf der Hardware- als auch auf der Software-Basis erfüllen.
1.1.1. Hardware Voraussetzungen
Es gelten folgende Voraussetzungen:
CPU
Grafikkarte
Arbeitsspeicher
Zusätzliche Hardware
Intel Pentium4 CPU mit 2.0GHz oder mehr
(bzw. Gleichwertige AMD CPU)
3D-Grafikkarte mit min. 64 MB VRAM und
voller
DirectX™
9.0
Unterstützung.
Anschluss analog oder digital
(ATI 9700 oder höher bzw. GeForce Ti4800
oder höher, optimal 128 MB VRAM)
Min. 512 MB RAM (optimal 1024 MB
RAM)
X3D – Bildschirm
Die oben aufgelisteten Werte sind sogar die Mindestvoraussetzungen um überhaupt einen
ordentlichen optischen Fluss zu erhalten. Wieso das so ist, klären wir in einem späteren
Kapitel. Jedoch sollte man sich vorab stets im Hinterkopf halten, dass es sich hierbei um 3DGrafiken handelt, was zur Folge hat dass die Grafikkarte die am meisten beanspruchte
Komponente ist. Grundsätzlich gilt: Je besser die Grafikkarte, desto flüssiger jede Art von
3D-Anwendung (vorausgesetzt die Anwendung nutzt die Grafikkarte).
1.1.2. Software Voraussetzungen
Es gelten folgende Voraussetzungen:
Betriebssystem


Zusätzliche Software



Microsoft(R) Windows(TM) XP
Home
Microsoft(R) Windows(TM) XP
Professional
Microsoft(R) Windows(TM) 2000
X3D-Software/Treiber (abhängig von
Funktionalität)
DirectX™ 9.0c und OpenGL
Derzeit werden nur die Betriebssysteme Windows 2000 und XP unterstützt. Für UnixSysteme gibt es zurzeit keinerlei Unterstützung (ist jedoch bereits in Planung).
Welche X3D-Software/Treiber man installieren muss hängt ganz von der Funktionalität ab.
Für Filme gibt es den X3D Multimedia Player, der für dass Abspielen von 3D-Filmen
verantwortlich ist. Für Spiele bzw. Anwendungen die auf OpenGL bzw. DirectX™ basieren
benötigt man je nach Wahl den OpenGL Enhancer bzw. den More3D-Treiber.
2. X3D – Bildschirme
Die X3D-Bildschirme sind der Kern des ganzen. Ohne sie hätten wir nichts von all der
schönen 3D Grafik. In diesem Kapitel werden wir folgendes behandeln:





Was sind X3D-Bildschirme?
Was sind deren Anwendungsgebiete?
Aufbau und Funktionsweise
Benötigte und vorhandene Software
Programmierung
2.1. Grundlegendes
Als erstes widmen wir uns der Frage was das denn überhaupt für Bildschirme sind und wofür
man diese einsetzen kann. Anschließend werden wir deren Aufbau in groben Zügen kennen
lernen und erfahren, wie ein realistisch wirkendes, dreidimensionales Bild in ihnen entsteht.
Danach lernen wir einige Software-Pakete kennen, die unverzichtbar bei der Anwendung von
X3D-Bildschirmen sind. Als letztes in diesem Kapitel erfahren wir einige wichtige
Grundlegende Dinge in Sachen Programmierung, auf die man achten sollte, wenn man 3DAnwendungen für diese Art von Systemen entwickelt.
„ES KÖNNTE EINE ART BIOLOGISCHE LEBENSFORM SEIN“ Dr.
Beverly Crusher, Star Trek TNG
2.1.1. Was sind X3D - Bildschirme?
Kurz und knapp:



3D ohne Brille
3D für Mehrere gleichzeitig
3D von verschiedenen Standpunkten aus
Die X3D-Bildschirme unterscheiden sich von den herkömmlichen Bildschirmen, wie wir sie
kennen. Diese sind nämlich in der Lage, Bilder dreidimensional darzustellen. Die Bildqualität
ist dabei unabhängig vom Betrachtungsstandpunkt.
Die 3D – Bildschirme sind in verschiedenen Ausführungen erhältlich. Die nachfolgende
Tabelle gibt eine Übersicht über die derzeit vorhandenen Bildschirme:
X3D-17“ Display AD
Auflösung: 1280 x 1024
Eff. Displaygröße (mm): 338,0 x 270,0
Diagonale (mm): 17" (432,0)
Gewicht: 10,0 kg
Äußere Abmaße
378,0 x 374,0 x 195,6
[B/H/T] (mm):
Eingang:
analog (VGA) 15 pin
D-Sub cable oder DVI
Stromversorgung: 100-240 V, 50/60 Hz
X3D-19“ Display AD
Auflösung: 1280 x 1024
Eff. Displaygröße (mm): 376,3 x 301,1
Diagonale: 19"
Gewicht: 10,0 kg
Äußere Abmaße
442,0 x 474,0 x 180,0
[B/H/T] (mm):
Eingang:
analog (VGA) 15 pin
D-Sub cable oder DVI
Netzeingang: 100-240 VAC, 50-60 Hz
X3D-20“ Display AD
Auflösung: 1600 x 1200
Eff. Displaygröße
408,0 x 306,0
(mm):
Diagonale (mm): 20"
Gewicht: 12,0 kg
Äußere Abmaße
483,0 x 502,0 x 210,0
[B/H/T] (mm):
Eingang:
analog (VGA) 15 pin
D-Sub cable oder DVI
Stromversorgung: 100-240 V, 50/60 Hz
X3D-40“ Display AD
Auflösung: 1280 x 768
Eff. Displaygröße
871,7 x 523,0
(mm):
Diagonale (mm): 40"
Gewicht: 41,0 kg
Äußere Abmaße
949,0 x 605,0 x 141,0
[B/H/T] (mm):
Eingang:
analog (VGA) und
digital(DVI)
Stromversorgung: 100-240 V, 50/60 Hz
X3D-50“ Display AD
Auflösung: 1280 x 768
Eff. Displaygröße
1098,2 x 620,5
(mm):
Diagonale (mm): 50"
Gewicht: 48,0 kg
Äußere Abmaße
1218,0 x 714,0 x 110,0
[B/H/T] (mm):
Eingang:
analog (VGA) und
digital(DVI)
Stromversorgung: 100-240 V, 50/60 Hz
2.1.2. Was sind deren Anwendungsgebiete?
Die Anwendungsmöglichkeiten der X3D-Bildschirme sind sehr vielfältig und die hiermit
möglichen dreidimensionalen Darstellungen faszinierend und effektvoll.
Neben Werbewirtschaft, Wissenschaft, Technik, Medizin ist diese Technologie vor allem für
die Unterhaltungsindustrie besonders interessant. Hierzu zählen unter anderem
Computerspiele und das tägliche Fernsehen. Angestrebt, durch diese Technologie, ist die
Einführung des 3D-Fernsehen.
Hier einige Beispiele für Anwendungsgebiete:
Werbewirtschaft





Wissenschaft und Technik





Medizin



neue Möglichkeit der werbewirksamen
Präsentation, z. B. Point of Sale, Point of
Information, Messeauftritt, Präsentationen,
Schaufenster,
virtuelle
Verkaufsportale,
Wegweiser
Steigerung der Aufmerksamkeit bei den
Kunden
Nutzung als Gemeinschaftsportale
verbessertes product placement
unterhaltsame und informative Verkürzung von
Wartezeiten
eingehende Analyse von Konstruktionen,
Entwicklungen und Entwürfen in jeder Phase
frühzeitige Analyse und Prüfung von
Planungsalternativen, technischer Maße und die
Integration in bestehende Baugruppen
mögliche Kostenoptimierung durch
Verringerung nachträglicher
Planungskorrekturen, nicht mehr unbedingt
notwendige Herstellung eines Prototypen,
effektivere Entwicklungszeiten
anschauliche Präsentation für Entscheider und
Kunden, welche nicht über das technische
Know-How und die Vorstellungskraft verfügen
Realisierbarkeit von Kundenwünschen
darstellbar
verbesserte Diagnostik
Steigerung der Ausbildungsqualität und der
Nachhaltigkeit von Wissen
Kostenoptimierung
2.2. Die Tiefen der X3D – Technologie
Nun wird es langsam an der Zeit etwas tiefer in diese neue Technologie einzutauchen. Uns
reicht es nicht (mir jedenfalls nicht) nur zu wissen wozu diese Bildschirme gut sind und wofür
man sie alles einsetzen kann. Ein Blick hinter die Kulissen wird uns mehr Aufschluss darüber
geben wie sie funktionieren und wie sie aufgebaut sind.
2.2.1. Aufbau und Funktionsweise
Die X3D-Bildschirme basieren auf den uns bisher bekannten Flach-Bildschirmen (TFT-LCD,
Plasma), welche um einen speziellen optischen Filter erweitert worden sind.
Diesen Filter nennt man Wellenlängenselektives Filterarray!
Dieser Filter gibt die Lichtausbreitungsrichtungen der einzelnen Subpixel des Bildschirmes
vor und befindet sich in einer fest vorgegebenen Entfernung zum Front-Panel des
Bildschirmes (Bild 2 Illustriert den Aufbau).
Bild 2
Einfach gesagt bewirkt der Filter, dass einzelne Farbwerte der Pixel in verschiedenen Winkeln
in den Raum abgestrahlt werden. Abhängig vom Betrachtungswinkel lässt der Filter darunter
liegende Pixel durch oder blockiert diese vollständig. Dadurch sieht der Betrachter immer
eine Kombination aus mehreren unterschiedlichen Ansichten, wovon einige das dominierende
Bild darstellen. Den Rest erledigt das menschliche Gehirn, welches die dominierenden Bilder
herausfiltert und aus diesen die Ungleichheiten ermittelt.
Sowohl der Betrachtungswinkel als auch der Abstand zum Bildschirm spielen eine
entscheidende Rolle in Bezug auf das resultierende Erscheinungsbild und auf die Räumliche
Wahrnehmung dieses Bildes. Anhand der nachfolgenden Skizze wollen wir dies näher
untersuchen (Bild 3).
Bild 3
Im obigen Bild (Bild 3) können wir sehen, aus welchen Entfernungen und
Betrachtungswinkeln unser Gehirn ein ordentliches Bild erkennen kann. Befindet sich der
Betrachtende vom Bildschirm weit entfernt, nimmt er zwei benachbarte Bilder wahr, nämlich
Bild 6 und 7. Je näher er dem Bildschirm rückt, desto mehr Bilder kann er erkennen (Bilder
zwischen 2 und 4, 4 und 7 etc.). Befindet sich ein Beobachter genau zwischen den kräftig
hervorgehobenen Linien (rote Augen zeigen diese besondere Position) nimmt er ein unreines
Bild wahr. Diese Bereiche, in denen ein unreines Bild entsteht, nennt man transitional area
(Übergangszone). Man kann es selbst an einem ganz einfachen Experiment beobachten. Man
ermittelt eine Position an der man das Bild gut erkennen kann. Nun schwenkt man ganz
langsam den Kopf horizontal nach links oder nach rechts. Irgendwann stellt man fest, dass das
Bild unreiner wird und nicht mehr richtig als ein 3D Bild zu erkennen ist. Geht man von
diesem Punkt aus dann weiter in die eingeschlagene Richtung, kommt man wieder an einen
Punkt, an dem das Bild wieder klar zu erkennen ist. Dies ist leider einer eines der Nachteile
mit denen diese X3D-Systeme zu kämpfen haben. Eine Lösung für dieses Problem könnte
z.B. sein, eine Kamera am Bildschirm anzubringen, welche die Kopfbewegungen mitverfolgt
und dementsprechend den Filter anpasst. Technisch sicherlich möglich, aber was passiert bei
mehreren Betrachtern? Die Lösung kann also nicht in der Hardware liegen, sondern in der
Software. D.h. dass die Anwendungen, welche dieses 3D-Feature nutzen entsprechend
optimiert sein müssen um ein akzeptables Ergebnis liefern zu können.
2.2.2. Die Entstehung von räumlicher Tiefe
Wie zuvor ausführlich besprochen, enthalten die Bilder mehrere perspektivische Ansichten
(insgesamt acht), die jeweils aus leicht versetzten Kamerapositionen aufgenommen wurden.
Diese Bildanteile werden nun ebenso versetzt in den Raum abgestrahlt. Der Betrachter hat
zwei Augen, die einen Abstand von 6,5 cm voneinander haben. Somit empfängt er jeweils
zwei dieser acht Bilder und sieht somit räumlich.
2.3. Software für X3D – Bildschirme
Im Besitz eines solchen Bildschirmes zu sein ist sicherlich eine wunderbare Sache, solange
man auch die notwendige Software dafür besitzt. Vom letzteren gibt es mittlerweile doch
recht viele und um hier die Übersicht behalten zu können werden wir uns nun kurz die bisher
verfügbaren Software-Produkte etwas genauer anschauen.
Derzeit verfügbar sind folgende Software-Produkte:
X3D – Tools
X3D – Media Player
X3D – 3D Studio Max Plugin
X3D – OpenGL Enhancer
More3D DirectX™ Stereo Driver
2.3.1. X3D – Tools
Die X3D-Tools sind eine Sammlung
grundlegender Programme, mit denen 3DBilder und auch Videos zusammengestellt
werden können.
Dieser Player erlaubt das Abspielen von
X3D-Spezifischen Videos und Standbildern.
Die 3D Studio MAX-Plugins ergänzen das
3D-Studio um Renderingfunktionalität für
X3D-Bilder.
Die
erforderlichen
acht
Teilbilder werden dabei im Hintergrund
automatisch berechnet und gerastert. Es ist
möglich, Einzelbilder sowie Bildsequenzen
zu berechnen. Die Szenen müssen dafür nicht
geändert werden.
Bei diesem Produkt handelt es sich um eine
Erweiterung des OpenGL-Treibers. Dieser
sorgt dafür, das OpenGL Anwendungen
dreidimensional auf den X3D – Bildschirmen
dargestellt werden.
Dieser Treiber beeinflusst 3D-Spiele und Anwendungen automatisch dahingehend,
dass diese ohne Modifikation X3Dkompatible Bilder berechnen. Die Benutzung
erfolgt analog zu Treibern für Shutterbrillen
wie z.B. die ELSA Revelator.
Die X3D-Tools sind sozusagen die Basis für alle anderen X3D-Software Produkte. Zu den
X3D-Tools gehören folgende Programme:






X3D Quick Start
X3D Display Manager
X3D License Manager
X3D Image Wizard
X3D zWraper
X3D Kamerad
Wir wollen uns nun diese einzelnen Programme etwas genauer anschauen um zu erfahren
wozu diese überhaupt dienen.
X3D Quick Start
Der X3D Quick Start ist nach der Installation
der X3D-Tools in der Task-Leiste zu finden.
Mit diesem Programm kann man alle anderen
X3D-Tools Programme starten. Es ist also
sozusagen nur eine schnelle Starthilfe für
andere Programme.
X3D Display Manager
Der X3D Display Manager ist für das
Selektieren eines angeschlossenen X3D –
Bildschirmes zuständig. Ebenso lassen sich
über
dieses
Programm
diverse
Einstellungsmöglichkeiten auf Knopfdruck
erledigen.
X3D License Manager
Der X3D License Manager ist für das
Verwalten der Lizenzen von zusätzlichen
X3D Programmen zuständig. Die meisten
dieser Programme sind im Lieferumfang
eines X3D – Bildschirmes nicht mit dabei
und sind mit zusätzlichen Kosten verbunden.
X3D Image Wizard
Der X3D Image Wizard erstellt X3D
Bilder
aus
mehreren
Betrachtungswinkeln bzw. extrahiert
einzelne
Bilder
aus
bestimmten
Betrachtungswinkeln.
X3D zWarper
Mit dem X3D zWarper kann man aus 2D-Bildern, welche eine Tiefen-Information besitzen,
X3D-Bilder erzeugen. Es dient also zur Erstellung von 3D Bildern aus den äquivalenten 2D
Bildern. Die Tiefeninformationen werden hierbei in einer Grau-Scala abgelegt (Bild 4),
welche jedem Pixel des 2D-Bildes eine Tiefe zuweist. Das 2D-Bild wird über eine TiefenMap so abgeändert, dass daraus ein 3D-Relief entsteht. Anhand dieses 3D-Reliefes generiert
der zWarper die benötigten Ansichts-Perspektiven welche für die Erstellung des 3D-Bildes
verwendet werden. Dieser Vorgang wird von X3D als „z-Warping“ bezeichnet.
Bild 4
Alles was man im Prinzip dann nur noch machen muss ist den zWarper zu starten, die beiden
Bild-Quellen anzugeben und diverse Einstellungen (Bildgröße, Format etc.) zu tätigen. Den
Rest übernimmt der zWarper.
X3D Kamerad
Dieses kleine Programm ist, wie der zWarper auch, für die Erstellung von X3D-Bildern zu
verwenden. Der Unterschied zwischen den beiden Programmen ist jedoch der, dass man hier
die verschiedenen Ansichten selber liefern muss. Selber liefern? Äh ... klingt ja recht
komplex! Ist aber in Wirklichkeit recht simpel. Möchte man z.B. von einem Fernseher ein
3D-Bild erzeugen, muss man nichts anderes machen, als mit einer Digi-Cam mehrere Bilder
aus verschiedenen Perspektiven aufzunehmen. Das dabei natürlich Schwankungen in den
Aufnahmen entstehen können ist selbstverständlich. Und genau für diese Schwankungen ist
das Programm Kamerad zuständig. Es korrigiert weitestgehend diese Unreinheiten und erstellt
am Ende ein 3D-Bild.
2.3.2. X3D – Media Player
Den X3D – Mediaplayer gibt es in zwei unterschiedlichen Versionen:


X3D Media Player Standard Version
X3D Media Player Professional Version
Die X3D Media Player Standard Version ist für das Abspielen von X3D-Spezifischen
Videos zuständig und erlaubt ebenso das Betrachten von X3D-Standbildern (im X3Dmv und
X3Dim Format).
Die X3D Media Player Professional Version im Vergleich zur Standard Version zusätzlich
die Möglichkeit eigene Komprimierte Video-Sequenzen zu erstellen. Ebenso erlaubt dieser
Player das Abspielen von MPEG2, AVI und WMV.
Mit beiden Versionen können playlists erstellt werden. In der Professional Version ist zudem
noch ein X3D Media Player ActiveX Control im Lieferumfang inbegriffen, wodurch man
diesen Media Player in eigene Programme, welche z.B. mit Delphi oder Visual Basic erstellt
wurden, einbinden kann.
Folgende Formate werden unterstützt:
Standard Version
3D-Formate



2D-Formate


Professional Version
3D-Formate

Komprimiertes X3Dmv Video
Format
Komprimiertes X3Dim / Img4D
Standbild Format
Unkomprimiertes AVI Format
Videos in AVI, MPEG1/2 und
WMV Format
Bilder in JPG, BMP, PNG, TGA
und TIF Format
Videos in AVI, MPEG1/2 und
WMV
2.3.3. X3D - 3D Studio Plugin
Dieses Plugin ist wirklich überaus mächtig und relativ simpel einzusetzen. Die Installation
erfolgt durch das Ausführen des entsprechenden Setup-Programms, abhängig von der
verwendeten 3D Studio Max Version. Unterstützt werden 3D Studio Max 4, 5 und 6. Nach
der Installation muss man dann nur noch das Plugin frei schalten. Dies erfolgt über den weiter
oben besprochenen License Manager.
Nach erfolgreicher Installation und Plugin Freischaltung kann man dann auch schon loslegen.
Einfach 3D Studio Max starten und das Plugin steht schon zur Verfügung.
Das wohl schönste an der ganzen Sache ist, dass meine seine bisherigen Szenen bzw. Projekte
nicht abändern muss um diese in 3D bewundern zu können. Das einzige was zu tun ist, sind
einige Einstellungen im Plugin vorzunehmen, damit das Rendern auch in 3D geschieht.
Achtung: Bei der Installation ist folgendes zu beachten. An der Stelle in der Installation, bei
dem man den Zielordner eingeben kann, muss man den 3Dstudio Max Ordner auswählen.
Also den Ordner, in welchem man seine 3D Studio Max Version installiert hat. Ansonsten
wird das Plugin nicht geladen. In diesem Fall muss man es zuerst deinstallieren und
anschließend neu installieren.
2.3.4. X3D – OpenGL Enhancer
Der X3D OpenGL Enhancer ist eine Erweiterung der standardisierten OpenGL-Schnittstelle,
die es ermöglicht, die Bilderzeugung auf der Grafikkarte entsprechend der X3D-Technologie
zu steuern. Bei dieser Erweiterung handelt es sich um eine einfache DLL, nämlich die
OpenGL32.DLL. Diese schaltet sich zwischen die Anwendung und dem eigentlichen
OpenGL Treiber.
Während die 3D-Anwendung wie gewohnt auf einem 2D-Bildschirm bedient wird, erzeugt
die Grafikkarte automatisch auf einem zusätzlichen X3D-Display eine echte 3D-Darstellung
der Szene, die tatsächlich im Raum steht.
Die 3D-Anwendung muss lediglich den OpenGL-Standard unterstützen, eine weitere
Anpassung der Software ist nicht mehr nötig. Wichtig ist, dass sich diese DLL in dem
Verzeichnis befindet, in der sich auch die entsprechende Anwendungsdatei befindet (also die
ausführbare EXE – Datei). Da der eigentliche OpenGL Treiber den gleichen Namen trägt wie
der OpenGL Enhancer sollte man diese unter keinen Umständen verwechseln. Ohne den
OpenGL Treiber funktioniert auch der OpenGL Enhancer nicht, was soviel heißt dass man
keine Grafikausgaben erhält.
Der linke Bildschirm zeigt die gewohnte
Darstellung der 3D-Anwendung an. Alle
Menüs, Texte, Bedienelemente etc. sind
vollständig verfügbar.
Das zusätzliche X3D-Display auf der rechten
Seite stellt die 3D-Szene parallel in echter
Tiefe dar. Die Objekte scheinen im Raum zu
schweben.
2.3.5. More3D DirectX™ Stereo Driver
Der More3D DirectX™ Stereo Driver ist eine universelle Software, die im Hintergrund einer
3D-Grafikanwendung mitläuft und alle deren Grafikausgaben in echtes, räumliches 3D-Stereo
für unterschiedliche Ausgabegeräte konvertiert (in diesem Fall für X3D – Bildschirme).
Dieser Treiber wurde nicht von X3D
entwickelt sonder, wie der Name bereits
verrät, von More3D (www.more3d.de).
Dabei handelt es sich um einen, wie
bereit oben erwähnt, universellen
Treiber. D.h. dass jede Art von 3D
Technik unterstützt wird. Die Ausgabe
erfolgt
stets
dreidimensional,
unabhängig von der verwendeten
Hardware für Anzeige. X3D arbeitet
jedoch mittlerweile recht eng mit
More3D zusammen.
Unterstützt werden 3D Anwendungen
basierend auf DirectX™ und OpenGL,
wobei es beim letzteren Einschränkungen gibt (nur Quad Buffered Applikationen
kontrolliertes Stereo). More3D legt den Schwerpunkt auf DirectX™.
Gründe hierfür sind folgende:
 DirectX bietet eine offene Plattform!
Der Grafik-Standard Microsoft® DirectX™ unterstützt die komplexen Funktionen der
neuesten Grafik-Hardware. Im Vergleich zu den meisten auf OpenGL basierenden
Anwendungen, wirken die Anwendungen, die die neueste DirectX Version benutzen,
fotorealistischer and grafisch aufwendiger als jemals zuvor.
 Mehr und bessere 3D-Anwendungen
Hunderte von Anwendungen verwenden DirectX™ als Standard. Sie können sofort ohne
jegliche Modifikation benutzt werden. Individuelle Ideen können mit Hilfe einer der 3DAntrieben, basierend auf dem hoch professionellen Direct3D™, implementiert werden oder
wir können für Ihren außergewöhnlich starken 3D-Motor eine Lösung erstellen.
Die nachfolgende Tabelle gibt eine komplette Übersicht über den More3D Stereo Treiber:
Features







Betriebssysteme


3D - Standards
Ausgabemedien





Echtzeit-Konvertierung von
Direct3D-Anwendungen
Arbeit unbemerkt im Hintergrund
Zahlreiche Einstellmöglichkeiten
Controlpanel innerhalb der
Applikation
Räumliche 3D-Screenshots auf
Tastendruck
Qualität vs. Geschwindigkeit
einstellbar
Geeignet für verschiedene 3DAusgabemedien
Microsoft(R) Windows(TM) XP
Home
Microsoft(R) Windows(TM) XP
Professional
Microsoft(R) Windows(TM) 2000
Direct3D,
im
Fenster
und
Vollbildmodi
4D-Vision Displays
X 3D-Displays
i-Art 3D-Aufsätze
Achtung: Der More3D Treiber läuft momentan nur in Kombination mit nVidia GeForceGrafikkarten. ATI-Grafikkarten werden zurzeit nicht unterstützt. Empfohlen wird mindestens
eine GeForce 4200Ti mit 128 MB VRAM.
Die Anwendung ist relativ einfach. Zuerst installiert man den More3D Treiber und startet
danach den Computer neu (man sollte vorher allerdings den neuesten Grafikkarten-Treiber
installieren). Nach dem Neustart wird automatisch schon der More3D Treiber geladen und
ausgeführt. Ein Symbol in der Task-Leiste gibt Zugriff auf die Einstellungsmöglichkeiten. Ist
dieses Symbol grau hinterlegt ist der Treiber inaktiv. Dies kann durch zuvor manuelles
Abschalten der Fall sein, oder aber es gab einen Fehler bei der Treiber-Initialisierung. Wenn
jedoch das Symbol in Farbe hinterlegt ist, war die Treiber-Initialisierung erfolgreich und es
können diverse Einstellungen vorgenommen werden. Die wichtigste dieser Einstellungen ist
die Auswahl des richtigen X3D-Bildschirmes. Ist nun auch dies erledigt steht einem nichts
mehr im Wege. Einfach die entsprechende 3D-Anwendung starten und auf dem X3DBildschirm genießen.
2.4. Die Programmierung
Bei der Entwicklung von 3D-Anwendungen für X3D Systeme gibt es einige Besonderheiten
auf die man unbedingt achten sollte. Zwar liefert X3D ein SDK (Software Development Kit)
auf Wunsch mit, jedoch liegt es nicht in unserem Interesse dieses SDK zu behandeln oder gar
zu nutzen. Für uns ist wichtig und entscheidend zu wissen, was man bei der 3D ProgrammEntwicklung unter OpenGL bzw. DirectX™ beachten muss damit am Ende ein akzeptables
Ergebnis herauskommt, ohne dabei das X3D-SDK verwenden zu müssen. Schließlich sind
aktuelle Computerspiele auf X3D-Systemen bereits lauffähig, ohne dass diese nachträglich
angepasst werden mussten.
2.4.1. Was ist zu berücksichtigen
Die wohl Beste Nachricht bezüglich dieses Themas ist, dass es Programmiertechnisch nichts,
aber auch wirklich gar nichts zu berücksichtigen gibt. Keine kryptischen Zusatzfunktionen
oder andere lästige Programmierprobleme mit denen wir zu kämpfen hätten. D.h. man
entwickelt seine 3D-Anwendung wie gehabt und bestaunt am Ende das Ergebnis auf den
X3D-Bildschirmen, ganz ohne Zusatzaufwand.
Jedoch gibt es einige Punkte, auf die man Rücksicht nehmen sollte, damit am Ende die
dreidimensionale Darstellung besser zur Geltung kommt.
Zum einen wäre da die Szenen-Gestaltung. Hier sollte man darauf achten, Bezugspunkte zu
haben. Ein Objekt erscheint noch realer und dreidimensionaler wenn man z.B. einen
Bezugspunkt in Form eines Hintergrundes oder eines anderen Objektes hat, welches sich in
einer gewissen Distanz zu anderen Objekten befindet. Dadurch erhält man einen wesentlich
besseren Tiefeneindruck.
Ein anderer Aspekt ist die Geschwindigkeit mit der man Objekte bzw. Kameras bewegt. Diese
sollte nicht zu schnell von statten gehen, eher langsam und geschmeidiger. Bei zu schnellen
Bewegungen erkennt unser Gehirn die Illusion als nicht ganz real an, und der so gewünschte
3D-Effekt bleibt teilweise bzw. ganz aus.
2.4.2. Eine Frage der Performance
Das wohl größte Manko bei der Programmierung ist die Performance, auf die man stets
Rücksicht nehmen muss. Man kann nicht einfach seine 3D-Anwendung mit tausenden von
Effekten und sonstigen Feinheiten voll packen und dann erwarten dass die 3D-Umrechnung
genauso flüssig von statten geht wie ohne diese 3D-Umrechnung. Wenn man bedenkt, dass
für jeden einzelnen Frame acht Kamera-Perspektiven berechnet werden müssen, kann man
sicht leicht vorstellen dass bei komplexen Szenen, die obendrein ja noch in Echtzeit berechnet
werden, die Performance extrem stark abfällt. Z.B. läuft die DirectX™-Demo, die wir im
nächsten Kapitel besprechen werden, ohne die Nutzung von More3D (was ja wie bereits
besprochen dafür benötigt wird) auf einem 1,6 Centrino mit einer ATI 9700 / 128 MB VRAM
Grafikkarte mit im Durchschnitt knapp über 200 FPS (Frames Per Second). Schaltet man
More3D hinzu, sinkt diese auf knapp über 24 FPS. Dieser Wert reicht zwar gerade noch für
eine flüssige Animationswirkung, bedenkt man jedoch, dass es sich hierbei nur um eine 3DDemo handelt, also kein Computerspiel bei dem zusätzlich Berechnungen für Kollision,
Künstliche Intelligenz, Physik etc. hinzukommen, ist dieser Wert äußerst ernüchternd.
OpenGL stellt übrigens auch keine Ausnahme dar, d.h. das eben erörterte Problem gilt auch
im Falle von OpenGL.
Ich selbst habe ein Computerspiel getestet (den Namen darf ich leider nicht verraten) um mir
ein Bild von dieser Problem-Situation zu machen. Tatsächlich war es so, wie ich es erwartet
hatte. Das Spiel zuckte und ruckelte munter vor sich hin wodurch der Spielgenuss natürlich
total flachfiel.
Dieses wohl recht bedeutende Problem führt zu einer weiteren Überlegung, nämlich zu der
Entscheidung über die richtige Wahl der Programmiersprache. Die DirectX™-Demo wurde in
C++ entwickelt. Hätte ich die gleiche Demo unter Java und mit Hilfe von Java3D entwickelt
(welche Leistungsmäßig DirectX™ weit unterlegen ist) wäre der Animationsablauf die reinste
Katastrophe. Die Firma More3D jedenfalls scheint den Schwerpunkt auf C/C++ zu legen, da
ja, wie bereits besprochen, DirectX der Favorit für das Unternehmen ist. Andere Sprachen
kämen für DirectX™ natürlich auch in Frage, jedoch ist es eine Tatsache, dass DirectX am
besten mit C++ harmoniert (dies beweisen unzählbare Tests und Benchmarks).
Achten Sie also bei der Entwicklung stets auf die Performance und optimieren Sie wo Sie nur
können. Wenn möglich versuchen Sie bei dem einen oder anderen Effekt zu tricksen; es muss
nur so aussehen als ob! Vermeiden Sie Überfrachtung in Form von zu vielen detaillierten
Modellen. Der Endnutzer bekommt grafisch vielleicht nicht das Beste aber er bekommt es in
echter 3D. Das alleine reicht für ein Stundenlanges Staunen. Es ist eine komplett neue
Technik, die bei weitem noch nicht ausgereift ist. Es ist nur eine Frage der Zeit bis auch echte
3D absolut flüssig laufen wird. Wenn es aber soweit ist, werden wir alle bald über die heutige
Anzeigetechnik lachen.
3. DirectX™ - Demo
3.1. Einleitung
In diesem Kapitel werden wir die DirectX™-Demo, welche zu Testzwecken für X3DBildschirme entwickelt wurde, besprechen. Wir werden klären, was gemacht wurde, was
beabsichtig war und welche Werkzeuge eingesetzt wurden. Anschließend widmen wir uns
dem Klassendiagramm und schauen uns das Zusammenspiel zwischen den einzelnen
Elementen an, sowie den Aufbau der in der Demo verwendeten Szenen. Da diese Demo mit
Hilfe einer 3D-Engine mit Namen ViperEngine entwickelt wurde, werden wir auch diese
kurz und knapp vorstellen. Als letztes werden wir dann noch grundlegende Probleme bei der
Echtzeitanimations-Entwicklung anschauen.
3.1.1. Was wurde gemacht?
Es wurde eine 3D Echtzeit-Animation in C++ mit einer 3D-Engine entwickelt, welche auf
DirectX™ 9.0c basiert. Die Echtzeit-Animation läuft, wie der Name schon sagt, in Echtzeit
ab. Grafiken, Positionen, Eingabemöglichkeiten, Musik und Physik werden während der
Laufzeit berechnet. Die Animation besteht aus insgesamt sechs unterschiedlichen Szenen, mit
jeweils sechs unterschiedlichen Effekten und Höhepunkten. Die Musik läuft synchron zur
Animation im Hintergrund ab und wurde hinsichtlich des Musikablaufs, auf diese
abgestimmt.
3.1.2. Was war geplant?
Geplant waren ursprünglich nur fünf Szenen in die Demo aufzunehmen. Da aber die gewählte
Musik eine relativ lange Laufzeit hat, wurde zusätzlich eine weitere Szene eingefügt um
einfach mehr Abwechslung bieten zu können.
Der gesamte Ablauf, also der Aufbau und die Gestaltung der Szenen stand vor der
Entwicklung bereits fest, wurde aber währenddessen verfeinert und teilweise auch abgeändert.
Die Wahl der Musik musste bereits im Vorfeld feststehen, da sich die gesamte Animation
danach richtet. Es wurde bewusst ein Titel der Kategorie GOA (Mischung aus Techno und
Trance) gewählt, um die Technische Seite der Animation in den Vordergrund zu stellen und
um einfach dass Ganze ‚fetziger’ wirken zu lassen.
„Nutzt du diese Maschine auch aus?“
Dade, Hackers
3.1.3. Szenen-Überblick
Die Gesamte Demo wird in Echtzeit gesteuert, wobei diese wiederum von der Musik in
Abhängigkeit gebracht wird. D.h. die Musik liefert mit der aktuellen Spur-Position auch die
aktuelle Zeit. Dadurch ist es möglich, während der Entwicklungsphase Sprünge an bestimmte
Stellen innerhalb der Animation vorzunehmen, was die Entwicklung wesentlich vereinfacht.
Ebenso ist es dadurch möglich, bestimmte Effekte innerhalb der Animation, mit der Musik zu
synchronisieren.
Die Szenen sind vollkommen unabhängig voneinander aufgebaut. D.h. dass man die Szenen
jederzeit auch in einer anderen Reihenfolge abspielen lassen kann. Zu beachten wäre dann
allerdings die Laufzeit jeder einzelnen Szene, welche ja dann evtl. neu eingestellt werden
muss. Diese ist nämlich abhängig von der Musik. D.h. ein Wechsel von einer Szene zur
anderen findet nach jedem Beat-Wechsel bzw. Rhythmus-Wechsel statt.
Es folgt nun ein grober Überblick jeder einzelnen Szene:
Szene 1
Szene 2
Szene 3
Szene 4
Szene 5
Szene 6
Hier wird ein kleiner Rundflug durch unser Sonnensystem
präsentiert. Jeder einzelne Planet samt zugehöriger Umlaufbahn
wird dargestellt. Es wurde der Übersicht halber auf korrekte
Größen und Distanzen verzichtet.
Diese Szene zeigt vier verschiedenfarbige rotierende Würfel
innerhalb eines anderen Würfels. Die einzelnen Würfel werfen
auf die Wand des umgebenden Würfels jeweils ein Spot-Licht in
der entsprechenden Würfel-Farbe. Interessant ist die
Farbmischung, wenn zwei Spot-Lichter übereinander liegen.
In dieser Szene sieht man einen Goldenen Stern, der die
Umgebung (eine Berglandschaft) spiegelt. Dieser wiederum fliegt
über eine Wireframe-Landschaft. Der 3D-Effekt kommt hier
besonders gut zur Geltung.
Bei dieser Szene kommt etwas Physik ins Spiel. Mehrere Kugeln
werden von einem Gravitationspunkt angezogen und Fliehkräfte
sorgen für den nötigen Schub. Wird eine Kugel zu stark
beschleunigt, so dass sie ihren ‚Orbit’ verlässt, prallt sie an einem
Umgebenden Würfel (dargestellt als ein Schachbrett) ab. Die
Weißen Felder dieses Schachbretts sind dabei durchsichtig, und
man erkennt erneut die Umgebende Berglandschaft.
Die vorletzte Szene simuliert ein Schwarzes Loch im Miniformat,
welches sich mitten in der Berglandschaft befindet. Dieses saugt
mehrere Kugeln in sich hinein. Interessant ist die Verzerrung die
sehr raffiniert simuliert wird.
Die letzte Szene ist der Abspann. Es wird eine animierte Magnum
dargestellt, die dreidimensionale Texte raus schießt, und
anschließend einen aus Cowboy-Filmen bekannten ‚Draw’
ausführt. Selbstverständlich muss auch mal nachgeladen werden,
ebenfalls animiert.
Nach dem Ende der Demo folgt noch ein abschließendes Bild, mit diversen Grüssen an
Bekannte und Freunde. Anschließend beendet sich die Demo von selbst.
Die Gesamtlaufzeit der Demo beträgt 7,5 Minuten. Da der Ablauf in Echtzeit stattfindet,
macht es keinen Unterschied ob man einen langsameren PC benutzt oder einen schnelleren.
Die Dauer bleibt stets fest, nämlich 7,5 Minuten.
3.1.4. Verwendete Werkzeuge
Für die Entwicklung dieser Demo wurde Microsofts(R) Visual Studio .NET eingesetzt,
welches ausschließlich zur Programmierung verwendet wurde.
Benötigt wurde zudem noch das DirectX™-SDK, welches sich ebenfalls auf der CD-ROM
befindet.
Für die Kompilierung innerhalb dieser IDE müssen folgende Vorarbeiten getroffen werden:
Als allererstes müssen Sie dass auf der CD-ROM befindliche DirectX-SDK installieren.
Danach kopieren Sie das Verzeichnis /Workspace von der CD-ROM, mit samt seinen
Unterverzeichnissen, auf die Festplatte und starten die Datei WorkSpace.sln welche sich im
Verzeichnis /Workspace befindet (Visual Studio .NET muß installiert sein).
Anschließend öffnen Sie den Options-Dialog unter dem Menüpunkt TOOLS > OPTIONS.
Wählen Sie hier anschließend PROJECTS > VC++ DIRECTORIES aus. Das nachfolgende
Bild veranschaulicht das Ganze etwas genauer.
Geben Sie nun das benötigte Include-Verzeichnis des DirectX™-SDKs an, sowie das IncludeVerzeichnis der ViperEngine und die der Demo Digillusion. Ebenso unter Include Files geben
Sie zusätzlich noch das rc-Verzeichnis der ViperEngine an.
Diese Verzeichnisse befinden sich innerhalb des /Workspace Verzeichnisses (z.B. das
Include-Verzeichnis der ViperEngine befindet sich in /Workspace/ViperEngine). Das IncludeVerzeichnis ihres DirectX™-SDK befindet sich innerhalb des Verzeichnisses, welches Sie bei
der Installation angegeben haben.
Als nächstes müssen Sie noch die jeweiligen Bibliotheken-Verzeichnisse angeben. Dies
geschieht über die Auswahl Library Files des gleichen Fensters (siehe Bild).
Hier müssen Sie das Lib-Verzeichnis Ihres DirectX™-SDKs angeben und zusätzlich noch
dass der ViperEngine. Bestätigen Sie anschließend mit OK.
Als nächstes müssen Sie dem Linker die zu bindenden Bibliotheken mitgeben. Dies geschieht
unter den jeweiligen Projekt-Einstellungen.
Öffnen Sie also zuerst die Projekt-Einstellungen für das ViperEngine-Projekt. Wählen Sie
dann CONFIGURATIONS PROPERTIES > LINKER > INPUT aus. Im Feld Additional
Dependencies tragen Sie folgendes ein: odbc32.lib odbccp32.lib d3d9.lib dxerr9.lib d3dx9.lib
dinput8.lib dxguid.lib dsound.lib winmm.lib strmiids.lib (siehe Bild).
Öffnen Sie nun die Projekt-Einstellungen für das Digillusion-Projekt und tragen Sie dort unter
Additional Dependencies folgendes ein: odbc32.lib odbccp32.lib WinMM.lib ViperEngine.lib
d3d9.lib d3dx9.lib.
Setzen Sie nun das Digillusion-Projekt als das aktive Projekt und drücken Sie die F5-Taste.
Falls es bei der Kompilierung zu Fehlermeldungen kommen sollte gehen Sie bitte die
einzelnen Schritte noch mal durch und überprüfen Sie diese auf Richtigkeit.
3.2. Die ViperEngine
Wir wollen nun kurz einen Blick auf die 3D-Engine werfen, mit der diese Echtzeit-Animation
entwickelt wurde. Die Engine wurde von Stefan Kraus in C++ entwickelt und basiert
vollständig auf DirectX™ 9.0. Die Gesamtentwicklungszeit dieser Engine betrug ca. 2 Jahre,
kurz nachdem DirectX™ 9.0 erschienen ist.
Die Engine ist ein Open-Source Projekt. Den Quellcode kann man bei Stefan Kraus
beantragen ([email protected]).
3.2.1. Eine knappe Einführung
Die Engine verfügt über folgende Fähigkeiten:















Abspielen und Manipulation von Sound-Dateien (MP3 Format)
Unterstützung von Keyboard und Maus Eingaben
2D/3D Grafikausgaben
Physik-Engine
Kollisionserkennung
Abspielen von Animationen, erstellt in 3D Studio Max
Texturverwaltung (Kubische Texturen, Volumen Texturen etc.), Multi-Texturing,
Bump-Maping
Pfad-Animationen (Direkt/Kurven)
Atmosphärische Effekte (Spiegelung, Nebel, Licht, Umgebung etc.)
Kompletter Enumerationsdialog mit Auswahl und Einstellmöglichkeiten (z.B.
Auflösung, Multisampling, Hardware-Rendering, Software-Rendering, Schatten etc.)
Rendern in mehrere Viewports und mit Rand (Kino etc.)
Manipulation von Modellen
2D/3D-Textausgaben
Laden von X-Files samt Animation und zugehöriger Texturen
Laden von .dm Dateien (eigenes Format, exportiert durch ein Script in 3D Studio
Max)
Da sich die Engine immer noch in der Entwicklung befindet, kommen in bestimmten
Zeitabständen ständig neue Features hinzu.
Die Engine wird mit der entsprechenden 3D-Anwendung als DLL-Datei mitgeliefert. Ohne
diese Datei lässt sich die Anwendung nicht ausführen. D.h. dass die Gesamte Funktionalität
der Engine sich in einer Dynamischen Bibliothek befindet, die erst zur Laufzeit gebunden
wird.
3.3. Aufbau der DirectX™ - Demo
3.3.1. Das Klassendiagramm
Das folgende Klassendiagramm gibt einen Aufschluss über die Zusammenhänge der für die
Demo verwendeten Klassen. Nur die wichtigsten Member und Methoden werden aufgelistet.
Die kompletten Klassen-Beschreibungen finden Sie in den entsprechenden Header-Dateien.
Digillusion (Main)
DEMO
SCENE01
Member:
- status
Methoden:
- Init();
- Render();
- Exit();
Member:
- ViperD3D
- ViperTexture
Manager
- ViperErrorHa
ndling
- ViperSound
- ViperDInput
- ViperDAudio
- Time
- quit
SCENE02
Member:
- status
Methoden:
- Init();
- Render();
- Exit();
Methoden:
- Load();
- Run();
- Unload();
SCENE03
SCENE04
SCENE05
SCENE06
Member:
- status
Member:
- status
Member:
- status
Member:
- status
Methoden:
- Init();
- Render();
- Exit();
Methoden:
- Init();
- Render();
- Exit();
Methoden:
- Init();
- Render();
- Exit();
Methoden:
- Init();
- Render();
- Exit();
3.3.2. Das Zusammenspiel
Das Zusammenspiel des Hauptprogrammes mit den Klassen bzw. die Klassen untereinander
ist relativ simpel und einfach gestrickt.
Das Hauptprogramm (Digillusion) erstellt zuerst ein Fenster, welches mittels der 3D-Engine
geschieht. Anschließend erstellt es eine Instanz der Klasse DEMO, wobei es das Handle und
die Instanz des zuvor erstellen Fensters übergibt. War dies ebenfalls erfolgreich wird die
Methode DEMO::Load() aufgerufen. Diese Methode macht nun folgendes:






Instanzen von ViperD3D, ViperTexturManager, ViperErrorHandling, ViperDAudio,
ViperSound, ViperDInput, ViperMesh etc. erstellen
Alle Modelle laden
Alle Texturen laden
Musik laden
Tastatur initialisieren
Alle Szenen Vor-Initialisieren
Nachdem all das reibungslos von statten gelaufen ist, wird im Hauptprogramm die Methode
DEMO::Run() aufgerufen. Diese Methode beinhaltet eine Schleife, die bei jedem Durchgang,
die entsprechende SCENE01...06::Render() Methode aufruft. Dieser Aufruf hängt vom Status
der jeweiligen Szene ab. Beim Start der Demo ist der Status von SCENE01 auf
STATUS_PLAY gesetzt und der Status aller anderen Szenen auf STATUS_STOP. Dadurch
wird also zuerst SCENE01 abgespielt. Ist die Abspielzeit von SCENE01 abgelaufen, setzt sie
ihren eigenen Status auf STATUS_FINISH. Dadurch weiß DEMO dass SCENE01 beendet
wurde, und setzt somit den Status der nachfolgenden Szene (SCENE02) auf STATUS_PLAY
wobei es natürlich zuvor die SCENE01::Exit() Methode aufruft. Innerhalb dieser Schleife
wird auch die aktuelle Position der Musik abgerufen welcher intern als float-Wert gehandhabt
wird. Dieser float-Wert stellt die Zeit dar, welche jeder SCENE01...06::Render() Methode
übergeben werden muss. Weiterhin wird innerhalb dieser Schleife auch die Tastatur-Eingabe
überprüft. Wird während der Laufzeit die ESC-Taste gedrückt, wird die interne Variable
QUIT auf TRUE gesetzt, was zum Abbruch der Schleife und somit zum Beenden der Demo
führt. Mit F10 kann man übrigens während des Ablaufs der Demo, Screenshots schießen!
Viel mehr gibt es hinsichtlich des Zusammenspiels nicht zu sagen. Wie ich bereits schon
erwähnt habe sind die Zusammenhänge relativ einfach. Natürlich besitzen die einzelnen
Szenen noch weitere Methoden, die sind jedoch selbsterklärend und Informationen dazu
können aus dem Quellcode entnommen werden.
3.4. Problemstellungen
Ich kann ruhigen Gewissens sagen, dass es keine ernstzunehmenden Probleme während der
Entwicklung dieser Echtzeit-Animation gab. Es gab hin und wieder ein paar Stolperfallen, die
jedoch recht schnell und zügig überwunden werden konnten. Dennoch möchte ich auf eine
wesentliche Problemstellung in der Echtzeit-Animations-Programmierung eingehen. Da sich
diese ebenfalls auf andere Bereiche übertragen lässt, finde ich es sinnvoll diese hier kurz zu
erläutern und Lösungsvorschläge bzw. Ratschläge zu geben. (Das gleiche gilt übrigens auch
für die OpenGL Demo!)
3.4.1. Synchronisation
Die Synchronisation ist wohl der Kernpunkt bei der Entwicklung einer Echtzeit-Animation,
welche in Kombination mit einem Musikstück abläuft und auch danach ausgerichtet werden
muss bzw. soll. Aber bereits auch ohne Musik kann es zu Problemen kommen.
Hierzu ein Beispiel:
Haben Sie schon einmal ein sehr altes Spiel gespielt, vielleicht eines, das noch aus der
„Steinzeit“ der Computer stammt? Falls ja, dann haben Sie bestimmt gemerkt, dass viele
dieser Spiele heute unglaublich schnell ablaufen und man zum Einsatz von so genannten
Blocker-Programmen, die den Prozessor verlangsamen, gezwungen wird. Ich möchte einmal
das Beispiel Wing Commander ansprechen. In diesem Spiel schlüpft der Spieler in die Rolle
eines Weltraum-Fliegers, der für das Überleben der Menschlichen Spezies gegen
Außerirdische Invasoren, den Kilrathi, kämpft.
Startet man dieses Spiel auf einem heutigen Rechner, kommt man leider kaum zum Spielen,
weil es innerhalb von einem Bruchteil einer Sekunde schon wieder zu Ende ist und man
abgeschossen wurde. Doch warum ist das so? Die damaligen Programmierer hatten wohl die
Entwicklung der Prozessorgeschwindigkeit reichlich unterschätzt und haben auch keine
Rücksicht auf die Zeit genommen. Sie haben also einfach vorausgesetzt, dass alle möglichen
Computer für verschiedene Aktionen gleich lange brauchen würden.
Dem ist aber nicht so, denn ein Intel Pentium 4 mit 1,4 GHz ist nun mal schneller als ein Intel
Pentium 3 mit 600 MHz. D.h. dass der P4 in der gleichen Zeit viel mehr Anweisungen
verarbeiten kann als sein Vorgänger, der P3. Das würde bedeuten, dass bei einem
Netzwerkspiel, welches zwei Spieler gegeneinander spielen, wobei einer der Spieler einen P4
und der andere einen P3 hat, der P4 Spieler schneller schießen, schneller laufen und überhaupt
alles schneller erledigen könnte als sein Gegner. Nicht besonders fair oder?
Das Problem hier ist, wie zuvor kurz erwähnt: die Zeit, welche vergessen wurde.
Die Lösung liegt darin, die Differenz zweier Zeitpunkte, nämlich zum einen am Anfang jeder
Spiele-Schleife und zum anderen am Ende jeder Spiele-Schleife, zu bilden und in Sekunden
umzurechnen. Diese Differenz muss dann nur noch mit jeder Aktion multipliziert werden und
schon läuft auf beiden Maschinen das Spiel synchron.
Hier ein kleines Code-Beispiel, wie so etwas aussehen könnte:
time1 = (float) timeGetTime();
While(!done)
{
time += ((float) timeGetTime() – time) / 1000.0f;
//Eingaben abfrage
//Sonstige Berechnungen durchführen
//Rendern
Render(time);
}
Render(float time)
{
ball_position.x += ball_geschwindigkeit * time;
}
Der Ball, aus dem obigen Beispiel, würde auf jedem PC gleich schnell ‚rollen’, Gott-ZEITDank!
Der Kern liegt also in der Zeit. Und genau dass gleiche Prinzip muss auch bei der
Entwicklung von Echtzeit-Animationen angewendet werden, damit ein konstanter
Animations-Fluss, unabhängig von Prozessorgeschwindigkeit, entsteht. Im Falle einer
Echtzeit-Animation, welche in Abhängigkeit von einem Musikstück steht, wird die Zeit nicht
berechnet sondern direkt aus der aktuellen Position innerhalb des Musikstückes ermittelt bzw.
ausgelesen. Gibt es dann z.B. Sprünge in der Musik, aufgrund unvorhergesehener
Prozessorbelastungen, entstehen auch synchrone Sprünge innerhalb der Animation, was dazu
führt, dass sowohl Animation als auch die zugehörige Musik Synchron zueinander ablaufen!
4.0 OpenGL – Demo
4.1. Einleitung
In diesem Kapitel werden wir die OpenGL-Demo, welche ebenfalls zu
Testzwecken für X3D-Bildschirme entwickelt wurde, besprechen. Wir
werden klären, was gemacht wurde, was beabsichtig war und welche
Werkzeuge eingesetzt wurden. Anschließend widmen wir uns der
Funktionsübersicht zu und schauen uns das Zusammenspiel zwischen den
einzelnen Funktionen an, sowie den Aufbau der in der Demo verwendeten Szenen.
4.1.1. Was wurde gemacht?
Es wurde eine 3D Echtzeit-Animation in der Programmiersprache C
entwickelt, welche auf OpenGL basiert. Die Echtzeit-Animation läuft, wie
der Name schon sagt, in Echtzeit ab. Grafiken, Positionen und
Eingabemöglichkeiten werden während der Laufzeit berechnet. Die
Animation besteht aus insgesamt drei unterschiedlichen Szenen. Im
Gegensatz zur DirectX™-Demo läuft diese Demo nicht selbstständig ab, d.h. dass man
zwischen den Szenen manuell wechseln muss (Tasten: F1 bis F3).
4.1.2. Was war geplant?
Geplant waren ursprünglich fünf Szenen in die Demo aufzunehmen, zusammen mit einem
passenden Musikstück. Die Gründe warum das nicht so geklappt hat wie geplant wurden
bereits am Anfang dieser Dokumentation (unter WICHTIGER HINWEIS) erläutert.
Auch bei dieser Demo stand der gesamte Ablauf bereits vor der Entwicklung fest, wurde aber
währenddessen verfeinert und teilweise auch abgeändert.
4.1.3. Szenen-Überblick
Im Gegensatz zur DirectX™-Demo läuft diese hier nicht selbstständig ab. D.h. dass der
Betrachter die Szenen-Wechsel manuell durchführen muss. Dies geschieht über die
Funktionstasten (F1 bis F3 für Szene 1 bis Szene 3).
Leider ist aus der Demo nicht das geworden, was ich mir vorgestellt hatte. Ich hatte geplant
eine Demo ganz im Stil der bereits besprochenen DirectX™-Demo zu programmieren. Der
Grund warum dieses Vorhaben nicht umgesetzt werden konnte, habe ich ja bereits auf der
ersten Seite dieser Dokumentation erläutert.
Auch hier sind die Szenen vollkommen unabhängig voneinander aufgebaut. D.h. dass man die
Szenen jederzeit auch in einer anderen Reihenfolge abspielen lassen kann.
Es folgt nun ein grober Überblick jeder einzelnen Szene:
Szene 1
Szene 2
Szene 3
In dieser Szene wird ein texturierter, rotierender Würfel
dargestellt.
Diese Szene zeigt eine im Wind wehende USA-Flagge. Der Wind
wird geschickt simuliert, d.h. es finden keine tatsächlichen
physikalischen Berechnungen statt.
In dieser Szene werden mehrere, stufenförmig angeordnete,
texturierte Würfel angezeigt. Diese Würfel rotieren ebenfalls,
wodurch sich, nach einer gewissen Zeit, die Stufe von selbst
aufbaut.
4.1.4. Verwendete Werkzeuge
Für die Entwicklung dieser Demo wurde ebenfalls Microsofts(R) Visual Studio .NET
eingesetzt. Benötigt werden außerdem noch zusätzlich die OpenGL-Bibliotheken, zusammen
mit allen zugehörigen Header-Dateien.
Das Einbinden der Bibliotheken und Header-Dateien erfolgt analog in der gleichen Art und
Weise, wie es bereits für das DirectX-Demo Projekt beschrieben wurde. Deshalb möchte ich
die einzelnen Schritte hier nicht noch mal erläutern. Bitte haben Sie dafür Verständnis.
Die Projekt-Dateien finden Sie auf der beiliegenden CD-ROM im Ordner /OglAndX3D.
Sie brauchen nur das OglAndX3D-Verzeichnis komplett auf die Festplatte zu kopieren und
anschließend nur noch die Datei OglAndX3D.sln auszuführen.
4.3. Aufbau OpenGL - Demo
4.3.1. Funktionsübersicht
Auch hier möchte ich nur die wichtigsten Funktionen kurz vorstellen, da eine komplette
Funktionsbeschreibung bereits im Quellcode vorhanden ist. Das Zusammenspiel klären wir
anschließend im nächsten Absatz.
Die wohl wichtigste aller Funktionen ist die WinMain() - Funktion. Diese ist unser
Haupteinstiegspunkt in das Programm. Hier werden alle notwendigen Initialisierungen
durchgeführt, sowie die Animation gestartet als auch komplett kontrolliert. Hier werden auch
alle Eingaben abgefangen und bearbeitet.
Es gibt je eine Initialisierungsfunktion für jede Szene. In jeder einzelnen werden SzenenSpezifische Einstellungen vorgenommen. In diesen werden allerdings keinerlei Texturdaten
geladen.
Das Laden aller Texturen findet in der LoadTextures() – Funktion statt. Diese wird noch vor
den einzelnen Initialisierungs–Funktionen aufgerufen.
Das Rendern der einzelnen Szenen wird über die Funktionen DrawScene01(), DrawScene02()
und DrawScene03() erledigt.
4.3.2. Das Zusammenspiel
Das Hauptprogramm (OglAndX3D) erstellt zuerst ein Fenster. Anschließend werden alle
Texturen geladen und alle Szenen initialisiert. Nachdem alles reibungslos von statten ging,
wird die Demo – Schleife betreten. Diese wird so lange ausgeführt, bis der Benutzer die ESCTASTE drückt, wodurch die Demo komplett beendet wird.
Hier eine grobe Übersicht über den Programmablauf (vereinfacht dargestellt):
WinMain()
{
// OpenGL – Fenster erstellen
CreateGLWindow();
// Alle Texturen laden
LoadTextures();
// Alle Szenen initialisieren
InitScene01();
InitScene02();
InitScene03();
// Die Lebenswichtige Schleife
While(!done)
{
// Tastatur – Eingaben verarbeiten
// Aktuelle Szene zeichnen – abhängig von Auswahl
DrawScene01() ... DrawScene03();
}
// Ende der Animation
KillGLWindow();
}
Innerhalb der Schleife werden Tastatur-Eingaben geprüft, und je nach aktueller Szenen-Wahl
die entsprechende Szene gerendert. Es werden hierbei keinerlei Status-Informationen der
einzelnen Szenen benötigt, da der selbst Benutzer entscheidet, welche Szene gerade abgespielt
werden soll.
5. Aufwand
Die folgenden Tabellen zeigen eine Übersicht über Aufwand in Bezug auf die einzelnen
Projekt-Teile:
Grundlagen
Vertiefung
Einarbeitung in die X3D-Systeme
8 Stunden
15 Stunden
Entwicklung der DirectX™-Demo
6 Stunden
Planung: Szenen-Aufbau
8 Stunden
Planung: Ablauf
3 Stunden
Planung: Logik
2 Stunden
Modell-Entwicklung
15 Stunden
Textur-Erstellung (Suche und Generierung)
98 Stunden
Programmierung
12 Stunden
Validierung
Entwicklung der OpenGL-Demo
2 Stunden
Planung: Szenen-Aufbau
1 Stunde
Planung: Ablauf
2 Stunden
Planung: Logik
8 Stunden
Modell-Entwicklung
4 Stunden
Textur-Erstellung (Suche und Generierung)
13 Stunden
Programmierung
3 Stunden
Validierung
Gesamtaufwand
200 Stunden
6. Fazit
Bisher gab es kein einziges Projekt an dem ich mehr Spaß und Interesse hatte wie bei diesem
hier. Die Faszination dieser X3D-Systeme treibt mich sogar soweit, dass ich mir in naher
Zukunft selbst einen solchen X3D-Bildschirm zulegen werde.
Die Einarbeitung in die X3D-Systeme war sehr Zeitaufwendig aber auch äußerst Interessant.
Ich hätte auch gerne noch weitaus mehr zu diesem Thema geschrieben, musste jedoch
aufpassen, die maximal geforderte Anzahl an Seiten nicht zu überstrapazieren.
Die Entwicklung der einzelnen Echtzeit-Animationen hat mir auch sehr viel Spaß gemacht,
zumal ich selbst meine Freizeit mit der Programmierung von 3D-Anwendungen verbringe
(Stichwort: ViperEngine). Leider muss ich zugeben, dass ich bei der OpenGL-Demo nicht
den gewünschten Spaßfaktor erfahren durfte, da diese unter extremen Zeitdruck entstanden
war und darüber hinaus nicht dass wurde, was ich mir gewünscht hatte.
Ich selbst bin überzeugt davon, dass sich die X3D-Systeme in naher Zukunft durchsetzen
werden. 3D-Fernsehen ist die Zukunft in Sachen Multimediale Unterhaltung. Wie lange das
jedoch auf sich warten lassen wird steht im Moment noch in den Sternen. Den ersten größeren
Einsatz dürften wir jedoch in der Spiele-Branche erwarten, und das nicht allzu ferner Zeit.
7. Quellen
X3D-Informationen




http://www.x3dworld.de
http://www.opticalitycorporation.com/
http://www.more3d.com
Schriftliches Zusatzmaterial in Englisch von Herrn Prof. Heinzel
Texturen und Grafiken
Planeten-Texturen:

http://www.softwareburner.de/sonnensystem.htm
Texturen für die Pistole in Scene06:

http://www.circlesoft.org/pages.php?pg=home
Andere Texturen:


Teils selbst erstellt unter MS Paint
Aus eigener Sammlung, welche aus downloads von diversen Internetseiten stattfand
(legal und frei erhältlich). Die zu den einzelnen Texturen zugehörigen Internetseiten
sind mir im einzelnen leider nicht mehr bekannt, da dies schon vor Jahren stattfand.
Modelle
Pistole:

http://www.circlesoft.org/pages.php?pg=home
Andere Modelle:
Erstellt in Maya (sehr simple Objekte, ohne Modellierungsaufwand, da diese unter Maya z.T.
schon als Template vorhanden sind). Exportiert in X-File durch frei verfügbares Plugin,
welches im DirectX-SDK inbegriffen ist. Texturierung erfolgt innerhalb des Programmcodes!
Musik

Protoculture – More Directions
Erhältlich unter www.scene.org. Steht aber mittlerweile nicht mehr auf dem Server zum
download bereit!
Zusätzlich verwendete Literatur (Buch/Internet):
Bücher:





3D Spieleprogrammieung mit DirectX™ 9.0
OpenGL Bible
Tricks of the 3D Game-Programming Gurus
Windows Programmierung
3D-Grafik
Internet:






http://nehe.gamedev.net
http://freespace.virgin.net/hugo.elias
http://www.gamedev.net
http://www.drunkenhyena.com
http://www.codesampler.com/dx9src.htm
http://www.cpp-home.com/index/tiki-view_blog.php?blogId=1
Herunterladen