Bachelorthesis Evaluierung von 3D Game

Transcription

Bachelorthesis Evaluierung von 3D Game
HOCHSCHULE REUTLINGEN
Alteburgstraße 150
72762 Reutlingen
Fakultät für Informatik
Studiengang Medien- und Kommunikationsinformatik
BACHELORTHESIS
EVALUIERUNG VON 3D GAME ENGINES
Bearbeiter
Dennis Schneider
Gustav-Schwab-Str. 5
72762 Reutlingen
Matrikel Nr.: 062148
Betreuer
Prof. Dr. rer. nat. Uwe Kloos
Prof. Dr. -Ing. Wolfgang Keller
Datum 18.01.2010
Danksagung
Die vorliegende Arbeit entstand im Rahmen meiner Bachelor Thesis an der Hochschule
Reutlingen, Fakultät Informatik, Studiengang Medien- und Kommunikationsinformatik.
„Denk falsch, wenn du magst, aber denk um Gottes Willen für dich selber.”
Doris Lessing
Ich danke meiner Freundin, meinen Eltern, meinen Freunden und meiner Familie für ihre
ständige Unterstützung sowie meinem Betreuer Herr Prof. Kloos für seine hervorragende
Betreuung.
ii
Kurzfassung
Diese Bachelor Thesis behandelt die Evaluierung von 3D Game Engines. Im Laufe der Arbeit
wird untersucht, ob sich Game Engines für den Einsatz in der Lehre eignen. Dabei wird in
einem Kapitel auf die Unterschiede gewöhnlicher Grafik Engines bzw. Rendering Engines
und Game Engines eingegangen. Es werden auch die verschiedenen Anwendungsgebiete,
sowie die wichtigsten Komponenten von Game Engines erläutert. Im weiteren Verlauf werden
die Vorgehensweise und die Methoden bei der Auswahl und Bewertung der Game Engines
beschrieben. Unter Verwendung einer Engine wird anschließend die Konzeption und Implementierung einer Anwendung erklärt, mit der zum einen die Engine demonstriert und zum
anderen gezeigt werden soll, wie die Theorie der Computer Grafik praktisch und spielerisch
erlernt werden kann. Ein Kapitel ist der Engine selbst gewidmet, in welchem sie genauer
erläutert wird. Zur weiteren Evaluierung der Anwendung wurde außerdem ein Fragebogen an
Personen verschickt, die am Kurs Computer Grafik derzeit teilnehmen oder teilgenommen
haben, um die Anwendung und deren Wirkung zu testen. Die Ergebnisse wurden anschließend
ausgewertet und werden im Laufe der Arbeit erläutert.
Abstract
This Bachelor Thesis describes the evaluation of 3D game engines. Throughout this Thesis it
will be evaluated if game engines are suitable for the assigment of teaching. Thereby the
differences of usual graphics engines respectively rendering engines and game engines will be
discussed. The different fields of application as well as the most important components of a
game engine will also be shown. In the further process the approach and the specific methods
for the selection and rating of the game engines will be described. The implementation and
the concept of an application using such a game engine will be discussed. The purpose of
the application is to demonstrate the used engine and to show how it is possible to learn
computer graphics practically and playfully. The used engine has its own chapter in which it
is specified more carefully. For the further evaluation of the application a questionnaire has
been sent to different persons who are attending or have attended the course of computer
graphics in order to test the application and its effects. The results have then been evaluated
and are described closer throughout this Thesis.
iii
Beschreibung der verwendeten Technologien
Die Entwicklung der Anwendung für diese Thesis wurde auf zwei Betriebssystemen parallel
vorgenommen, um auch tatsächlich die volle Plattformunabhängigkeit des Quellcodes zu
testen. Dadurch sollten auch Unterschiede bei der Verwendung der beiden Grafikschnittstellen
OpenGL und DirectX festgestellt werden. Zur Entwicklung des Spiels unter Kubuntu Linux
wurde als Entwicklungsumgebung Eclipse1 Version 3.5.0 „Galileo“ mit dem Plugin CDT 23
verwendet. Mit CDT wird es möglich, C / C++ Projekte auf der Eclipse IDE 4 zu entwickeln.
Unter Windows XP wurde für die Entwicklung Visual Studio 2008 verwendet. Als 3D Game
Engine diente das OGRE SDK 5 in der Version 1.6.3 „Shoggoth“. Für die Erstellung von
Grafiken für die Anwendung und für dieses Dokument wurden die kostenlosen Programme
„The GIMP“6 und „Inkscape“7 benutzt. Für die Diagramme der Unified Modelling Language
wurde das frei verfügbare Programm „Umbrello“8 eingesetzt.
In der vorliegenden Arbeit werden englische Fachbegriffe bei ihrer ersten Nennung kursiv
dargestellt.
Begriffsklärung
Diese Thesis behandelt als Thema die Evaluierung von 3D Game Engines. Jedoch werden
auch Engines in die Evaluierung mit einbezogen, die an sich in ihrer Grundform keine Game
Engines, sondern nur reine Rendering Engines bzw. Grafik Engines sind. Durch vorhandene
sogenannte Wrapper und externe Bibliotheken lassen sich diese Rendering Engines aber zu
vollwertigen Game Engines erweitern. An dieser Stelle wird ausdrücklich darauf hingewiesen,
dass auch diese reinen Rendering Engines in dieser Arbeit als „Game Engines“ bezeichnet
werden und nicht für jede Form einer Engine der Begriff explizit differenziert wird. An manchen
Stellen werden sie auch schlicht „Engines“ genannt.
1
http://www.eclipse.org/
C/C++ Development Tooling
3
http://www.eclipse.org/cdt/
4
Integrated Development Environment (dt. Integrierte Entwicklungsumgebung)
5
Software Development Kit
6
http://www.gimp.org/
7
http://www.inkscape.org/
8
http://uml.sourceforge.net/
2
iv
Inhaltsverzeichnis
1 Einleitung
1.1 Motivation und Relevanz . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2 Zielsetzung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.3 Struktur dieser Thesis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2 Game Engines
2.1 Einführung und Grundlagen . . . . . . . . . . . . . . . .
2.1.1 Der Unterschied zwischen einer Grafik Engine und
2.1.2 Die Komponenten einer Game Engine . . . . . .
2.2 Populäre Game Engines . . . . . . . . . . . . . . . . . .
2.2.1 Kommerziell . . . . . . . . . . . . . . . . . . . .
2.2.2 Open Source / Kostenlos . . . . . . . . . . . . .
2.3 Anwendungsgebiete . . . . . . . . . . . . . . . . . . . .
2.3.1 Spiele . . . . . . . . . . . . . . . . . . . . . . .
2.3.2 Virtuelle Realität und Simulationen . . . . . . . .
2.3.3 Informationsvisualisierung . . . . . . . . . . . . .
2.3.4 Visualisierung von Gebäuden und Landschaften .
2.3.5 Medizin . . . . . . . . . . . . . . . . . . . . . .
2.3.6 Lehre . . . . . . . . . . . . . . . . . . . . . . . .
. . .
einer
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
1
1
2
3
. . . . . . . .
Game Engine
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
5
5
5
6
11
11
13
16
16
16
18
19
20
21
3 Evaluierung der Game Engines
3.1 Vorgehensweise . . . . . . . . . . . . . . .
3.2 Gewichtung der Kriterien . . . . . . . . . .
3.3 Ergebnisse der Nutzwertanalyse . . . . . . .
3.4 Auswahl der zu verwendenden Engine . . .
3.5 Demonstration und Ansätze für die Lehre .
3.6 Erstellung und Auswertung des Fragebogens
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
23
23
29
31
34
35
37
4 OGRE
4.1 Engine Einführung . . . . . . . . . . . . .
4.2 Struktur und Aufbau von OGRE . . . . .
4.2.1 Root Objekt . . . . . . . . . . . .
4.2.2 Szenenmanager und Szenengraph .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
40
40
42
42
42
.
.
.
.
v
Inhaltsverzeichnis
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
44
44
45
46
5 Konzeption
5.1 Spielkonzept . . . . . . . . . . . . . . . . . . . . . .
5.1.1 Grundlagen der Spielemechanik . . . . . . . .
5.1.2 Übertragung auf das eigene Spielkonzept . . .
5.2 Anforderungen . . . . . . . . . . . . . . . . . . . . .
5.2.1 Zielbestimmung und Einsatz der Anwendung
5.2.2 Produktumgebung . . . . . . . . . . . . . . .
5.2.3 Qualitätszielbestimmungen . . . . . . . . . .
5.2.4 Weitere Teile des Pflichtenheftes . . . . . . .
5.3 Architektur . . . . . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
49
49
49
52
53
53
54
55
56
56
.
.
.
.
.
.
.
.
58
58
59
60
65
72
72
74
74
4.3
4.2.3 Ressourcenmanagement . . . . . . .
4.2.4 Render Systeme und Render Targets
4.2.5 OGRE Manager . . . . . . . . . . .
Erweiterungen für OGRE . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
6 Implementierung
6.1 Grundlagen . . . . . . . . . . . . . . . . . . . . . .
6.2 Struktur und Aufbau . . . . . . . . . . . . . . . .
6.2.1 Klassen . . . . . . . . . . . . . . . . . . .
6.2.2 Implementierung der Ansätze für die Lehre .
6.3 Probleme und Lösungen bei der Implementierung .
6.3.1 Kollisionserkennung . . . . . . . . . . . . .
6.3.2 Laden und Entladen der Levels . . . . . . .
6.3.3 Darstellung von Terrain . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
7 Fazit und Ausblick
76
7.1 Fazit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
7.2 Ausblick . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
Literaturverzeichnis
A Anhang
A.1 Tabellen der Nutzwerte untersuchter Engines . . . . . . .
A.2 Installation des Spiels . . . . . . . . . . . . . . . . . . . .
A.3 Installation und Einrichtung des OGRE SDKs . . . . . . .
A.3.1 Manuelle Erstellung . . . . . . . . . . . . . . . . .
A.3.2 Erstellung mit Hilfe des OGRE Application Wizards
A.3.3 Fehlerquellen . . . . . . . . . . . . . . . . . . . .
A.4 Fragebogen . . . . . . . . . . . . . . . . . . . . . . . . .
79
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
93
93
96
97
98
105
105
106
vi
1 Einleitung
1.1 Motivation und Relevanz
Computer- und Videospiele erlangen zunehmend einen höheren Status in unserer heutigen
Kultur. Waren sie früher gesellschaftlich mehr oder weniger verpönt, gibt es heutzutage sogar
ganze Verbände und Wettkämpfe rund um Computer- und Videospiele, genannt E-Sport 1 .2 In
Ländern wie Südkorea haben Spieler von Computer- und Videospielen sogar den Status eines
Stars, vergleichbar mit einem Sänger oder Filmstar in den westlichen Ländern. Computerund Videospiele stellen einen neuen Teil der Unterhaltung dar. Im Gegensatz zu Filmen
oder Büchern ist die Teilnahme am Computer- oder Videospiel interaktiv. Man bewegt sich
selbstständig, man trifft eigene Entscheidungen und erlebt die Geschichte hautnah. Man
tritt quasi selbst in die Hauptrolle der Geschichte. Die Spiele lassen es mittlerweile sogar
zu, Einfluss auf die Handlungen zu nehmen. Waren Spiele früher ausschließlich linear, ist es
heute möglich, verschiedene Wege innerhalb der Spiele zu gehen und somit zu alternativen
Enden zu gelangen. Laut einer Pressemitteilung des Statistischen Bundesamt Deutschland
aus dem Jahre 2004 verbringen vor allem Jugendliche zwischen 15 und 17 Jahren täglich eine
Stunde vor dem Computer mit Computerspielen. Je älter die Personen, desto weniger dient der
Computer als Freizeitinstrument.3 Einen neuen Weg hat hier die Nintendo Wii eröffnet, mit
der sogar die obersten Altersgruppen spielen, da sie einen komplett neuen Weg der Interaktion
bietet. Weltweit werden verschiedene Konferenzen wie beispielsweise die gamescom4 in Köln
abgehalten, in deren Mittelpunkt interaktive Spiele und Unterhaltung stehen.
Die Absichten von Spielen haben sich stellenweise ebenfalls verändert. Stand früher ausschließlich die Unterhaltung im Vordergrund, gibt es heutzutage Spiele, die auf einen Lernoder Ausbildungseffekt abzielen - sogenannte Serious Games. Es gibt Spiele wie Anatomy of
1
elektronischer Sport
Vgl. Süddeutsche Zeitung (2009)
3
Vgl. Statistisches Bundesamt (2009)
4
http://www.gamescom.de/
2
1
1 Einleitung
Care 5 , bei dem Krankenschwestern bzw. Krankenpfleger den Umgang mit Patienten lernen
sollen oder beispielsweise Global Conflicts 6 , bei dem Schüler einen Journalisten verkörpern,
Artikel schreiben müssen und so beispielsweise Konflikte wie etwa zwischen Palästina und
Israel verständlich gemacht werden sollen. Es existieren auch Advergames, die ausschließlich
auf den Zweck der Werbung abzielen. Ein nennenswertes Beispiel ist hier Americas Army 7 ,
ein Spiel, das von der US Armee zur Anwerbung und Rekrutierung von Soldaten dient. In
diesem Zusammenhang sollte auch der wirtschaftliche Nutzen von Computer- und Videospielen genannt werden: Allein in Deutschland liegt der Umsatz von Computerspielen laut dem
Interessenverband Bundesverband Interaktive Unterhaltungssoftware im Halbjahr 2009 bei
649 Millionen Euro. Im Zeitraum von Januar bis Juni des Jahres 2005 lag der Umsatz bei 474
Millionen Euro. Hier kann man die starke Entwicklung des Marktes für Videospiele beobachten,
immerhin handelt es sich um einen erhöhten Umsatz von 175 Millionen Euro für das erste
Halbjahr.8
War es früher üblich, ein Spiel komplett von Grund auf selbst zu entwickeln, wird heute mit
Hilfe von sogenannten Game Engines die Entwicklung vereinfacht. Ein Teil dieser Engines
ist sogar kostenlos verfügbar. Dies eignet sich perfekt für Hobby-Entwickler, Studenten und
natürlich auch für Personen, die mit der Entwicklung von Spielen Geld verdienen möchten.
Diese Game Engines selbst werden nicht nur für die Entwicklung von Spielen verwendet,
sondern auch für etwaige andere Zwecke. Betrachtet man die verschiedenen Einsatzzwecke
genauer, so liegt es nur nahe, solche Engines auch für die Lehre einzusetzen. In dieser Arbeit
sollen entsprechende Engines gefunden und evaluiert werden, die zur Lehre des theoretischen
Hintergrunds der Computer Grafik verwendet werden können.
1.2 Zielsetzung
Ziel dieser Arbeit ist es, 3D Game Engines zu finden, welche im Kurs Computer Grafik
der Hochschule Reutlingen zur spielerischen und praktischen Vermittlung der Theorie von
Computer Grafik verwendet werden können. Zudem soll geprüft werden, ob diese Art der
Vermittlung auch sinnvoll ist. Zu Beginn wird eine Übersicht über verschiedene signifikante
5
http://www.willinteractive.com/the-anatomy-of-care
http://www.globalconflicts.eu/
7
http://www.americasarmy.com/
8
Vgl. Bundesverband Interaktive Unterhaltungssoftware (2009)
6
2
1 Einleitung
Game Engines, deren Komponenten und auch deren unterschiedliche Anwendungsgebiete
gegeben. Anschließend werden diverse Game Engines zusammengetragen, die sich für die Lehre
eignen könnten. Im weiteren Vorgehen wird anhand bestimmter Kriterien eine Bewertung
dieser Engines vorgenommen. Die Engines mit der höchsten Bewertung werden anschließend
ausgewählt und genauer betrachtet. Sie werden noch einmal tiefergehend auf die Kriterien
geprüft und gegeneinander abgewogen. Die Engine mit der höchsten Bewertung wird anhand
eines Spieles demonstriert, mit dem auch die theoretischen Konzepte der Computer Grafik
vermittelt werden sollen. Die Schwerpunkte bei der Implementierung liegen dabei auf der
Demonstration der Fähigkeiten der Engine und der Vermittlung der Konzepte der Computer
Grafik. Mit Hilfe eines Fragebogens soll außerdem ausgewertet werden, ob die Theorie
praktisch und spielerisch erlernt werden kann. Dieser Fragebogen wird an verschiedene
Studenten verschickt, die am Kurs Computer Grafik der Hochschule Reutlingen derzeit
teilnehmen oder bereits teilgenommen haben.
Bei der Auswahl wird auf kommerzielle Engines verzichtet.
1.3 Struktur dieser Thesis
Diese Thesis ist folgendermaßen strukturiert:
• Kapitel 2 beschreibt das Thema Game Engines ausführlich. Es wird dabei auf die
Grundlagen von Game Engines eingegangen. Es werden Begriffe geklärt, populäre
Beispiele für Game Engines genannt und Anwendungsgebiete und aktuelle Entwicklungen
vorgestellt
• Kapitel 3 behandelt die Evaluierung der Game Engines und geht dabei konkret auf die
Vorgehensweisen und Methoden bei der Evaluierung sowie die daraus resultierenden
Ergebnisse ein
• Kapitel 4 präsentiert die durch die Evaluierung ausgewählte Engine OGRE. In Diesem
Kapitel wird eine Einführung in OGRE gegeben, die Struktur und der Aufbau der Engine
erklärt und einige wichtige Erweiterungen vorgestellt
• Kapitel 5 widmet sich der Konzeption der Anwendung auf Basis von OGRE
• Kapitel 6 zeigt die konkrete Implementierung und damit verbunden die Struktur der
Anwendung, die Implementierung der Ansätze für die Lehre und die dabei aufgetretenen
Probleme und deren Lösungen
3
1 Einleitung
• Kapitel 7 fasst die Erkenntnisse dieser Arbeit zusammen und gibt einen Ausblick für
die Zukunft
• Der Anhang beinhaltet die Installationsanleitung für die im Rahmen dieser Arbeit
entwickelten Anwendung, eine Installationsanleitung für das OGRE SDK, sowie nicht
aufgeführte Tabellen der Nutzwertanalyse aus Kapitel 3 und den Fragebogen
4
2 Game Engines
In diesem Kapitel wird ein Überblick über das Thema Game Engines gegeben. Dabei wird auf
die Grundlagen eingegangen. Es wird unter anderem erläutert, wo der Unterschied zwischen
einer Game Engine und einer reinen Grafik Engine bzw. Rendering Engine liegt. Darüber
hinaus soll ein Einblick in die Anwendungsgebiete von Game Engines ermöglicht werden. Am
Ende des Kapitels wird auf die aktuellen Entwicklungen und einige populäre Beispiele für
kommerzielle sowie quelloffene (engl. open source) Game Engines eingegangen.
2.1 Einführung und Grundlagen
2.1.1 Der Unterschied zwischen einer Grafik Engine und einer Game Engine
Eine Grafik Engine hat auf unterster Ebene die Verantwortung, die Objekte zu zeichnen, die
ein Betrachter sieht. Der Programmierer einer Engine verwendet typischerweise eine GrafikAPI wie OpenGL oder Direct3D, um einen Renderer zu programmieren, welcher die Objekte
korrekt zeichnen muss. Auf manchen Plattformen existiert keine Hardwarebeschleunigung
oder eine Standard API ist nicht verfügbar, somit muss der Programmierer möglicherweise
das gesamte Grafiksystem schreiben, welches dann ausschließlich auf der CPU läuft. Das
ganze wird als Software Renderer bezeichnet. Obwohl die heutige Grafik-Hardware es unnötig
macht, einen Software Renderer auf solchen Systemen bereitzustellen, ist es in vielen Fällen
immer noch sehr wichtig - zum Beispiel für den Einsatz von Grafik auf eingebetteten Systemen
wie beispielsweise Handys und Handhelds.1 Eine Grafik Engine hat demnach vor allem eine
wichtige Hauptaufgabe: die Zeichnung und Darstellung von Objekten. Wie unterscheidet
sich eine reine Grafik Engine nun von einer Game Engine? Generell ausgedrückt liegt der
Unterschied darin, dass außer dem Renderer noch weitere Komponenten enthalten sind. Eberly
(2005) hat hierzu ein Referenzwerk geliefert, das über die Jahre zu der bekannten Game
1
Vgl. Eberly (2005), S. 149 f.
5
2 Game Engines
Engine Gamebryo2 geführt hat. In diesem Werk beschreibt der Autor anhand der eigens
entwickelten Game Engine die Architektur durch folgende Komponenten:
• Die Kernsysteme, bestehend aus dem Low-Level-System, dem mathematischen System
und dem Objektsystem
• Der Szenengraph und der Renderer
• Die Kollisionserkennung und Physik
Nach Gregory (2009) lassen sich noch weitere Komponenten ergänzen:
• Frontend
• Ressourcen Manager
• Animationssystem
• Audiosystem
• Netzwerkfunktionalität
• Scripting
• Künstliche Intelligenz
2.1.2 Die Komponenten einer Game Engine
Zuvor wurden einige wichtige Komponenten einer Game Engine aufgezählt. In diesem Abschnitt
soll nun genauer auf die Komponenten und deren Aufgaben eingegangen werden. Es gibt
noch eine Menge weiterer Bestandteile, deren vollständige Aufzählung und Beschreibung
in dieser Arbeit allerdings den Rahmen sprengen würde. Daher werden ausschließlich die
signifikantesten aufgeführt.
Low-Level-System
Das Low-Level-System beinhaltet die grundlegenden Datenstrukturen, Speicherzuweisungbzw. bereinigung und Funktionen wie Dateiverwaltung. Manche zur Verfügung gestellte
2
http://www.emergent.net/1/Gamebryo/
6
2 Game Engines
Datentypen sind nicht unbedingt optimal für eine Engine zu verwenden. Daher verwendet
etwa Eberly (2005) in seiner eigenen Engine selbst implementierte Datenstrukturen für Arrays,
Hash Tabellen, Hash Sets, Listen, Sets, Stacks und Strings. Durch die selbst verwendeten
Datenstrukturen lässt sich die Geschwindigkeit einer Anwendung merklich erhöhen. Mit Hilfe
der Dateiverwaltung werden Dateien geöffnet und gelesen und über die Speicherzuweisungbzw. bereinigung wird es ermöglicht, spezielle Datenstrukturen wie beispielsweise ein zweidimensionales Array zu löschen.3
Mathematisches System
Jede Engine, die sich mit Computer Grafik auseinandersetzt, benötigt zwangsweise ein
Teilsystem für Mathematik wie Vectoralgebra und Matrixalgebra. Dieses Teilsystem stellt
dann Funktionen für die Berechnung von trigonometrischen Funktionen wie Sinus, Cosinus
und Tangens sowie Vektoren, Matrizen und Quaternionen bereit. Auch die Farben werden
über dieses Teilsystem geregelt.4
Objektsystem
Eine Grafik Engine ist groß und komplex und wird daher hinsichtlich der Bibliotheken
entsprechend entworfen, meist unter Verwendung des objektorientierten Paradigmas. Das
Objektsystem stellt automatische Dienste für die Entwickler bereit, welche mit der Verwaltung der Objekte zusammenhängt, die sich aus der objektorientierten Programmierung der
Anwendung ergibt. Beispielhaft kann hier das Abrufen der Typinformation eines Objektes
oder einer Variable zur Laufzeit genannt werden.5
Renderer
In Abschnitt 2.1.1 auf Seite 5 wurde bereits kurz auf den Renderer eingegangen. Er ist
für die Zeichnung der Objekte zuständig, wie beispielsweise Punkte, Linien und dreieckige
Polygonnetze (engl. Mesh). Dabei kümmert er sich um geometrische Transformationen und
Typen sowie um Texturen, Materialien und Beleuchtung. Dieser Vorgang des Zeichnens
wird manchmal auch als „fixed-function pipeline“ bezeichnet. Früher war es nur möglich,
vorgegebene Funktionen der Grafikschnittstelle aufzurufen. Neuere Grafik Hardware erlaubt
es allerdings, die Hardware selbst zu programmieren. Diese Programme werden auch Shader
3
Vgl. Eberly (2005), S. 33 ff.
Vgl. Eberly (2005), S. 53
5
Vgl. Eberly (2005), S. 105
4
7
2 Game Engines
genannt. Es gibt zwei Arten von Shadern, Vertex Shader und Pixel Shader, auf die im späteren
Verlauf der Arbeit noch eingegangen wird.6
Szenengraph
Die Welt eines Spiels wird als Szene bezeichnet. Die Objekte in der Welt sind ein Teil
dieser Szene. Wenn man nun die gegenseitigen Beziehungen zwischen den Objekten und
deren verschiedenen Attributen mit einbezieht, könnte man das Resultat als Szenengraph
bezeichnen. Über diesen Szenengraph kann man dann die Objekte begrenzen, die vom Renderer dargestellt werden. Beispielsweise wenn sie überhaupt nicht oder nur teilweise sichtbar
sind. Dadurch muss der Renderer weniger verarbeiten. Dies wird als Szenengraphmanagement bezeichnet. Sichtbarkeitsentscheid bzw. Verdeckungsberechnung sind ein Aspekt des
Szenengraphmanagements. Es könnte als Frontend des Renderers bezeichnet werden.7
Kollisionserkennung und Physik
Kollisionserkennung ist ein komplexes Themengebiet und unerlässlich für die Interaktion mit
der virtuellen Spielwelt. Häufig verwenden Physiksysteme ein Kollisionserkennungssystem, um
physikalische Grenzen zu bestimmen und darüber hinaus ein Kollisionsrückmeldungssystem,
welches die Bewegung der kollidierenden Objekte verändert.8 Kollisionserkennung stellt sicher,
dass Objekte sich nicht gegenseitig durchlaufen können. Was die meisten Game Engines
heutzutage als „Physik“ bezeichnen, ist genauer gesagt eine Simulation der Dynamik starrer
Körper (engl. rigid body dynamics). Ein starrer Körper ist ein idealisiertes, unendlich hartes,
nicht deformierbares und festes Objekt. Die Dynamik bezieht sich dabei auf den Prozess
der Bestimmung, wie diese starren Körper sich über die Zeit und unter dem Einfluss von
Kräften bewegen und interagieren.9 Kollision und Physik sind für gewöhnlich eng miteinander
verzahnt. Heutzutage entwickeln nur noch wenige Firmen ihr eigenes Kollisionserkennungsbzw. Physiksystem, stattdessen werden SDKs von externen Entwicklern verwendet. Hier gibt
es beispielsweise die Havok Physik Engine10 oder PhysX11 von Nvidia. Darüber hinaus gibt
es viele quelloffene Systeme wie beispielsweise die Open Dynamics Engine (ODE).12
6
Vgl. Eberly (2005), S. 149 f.
Vgl. Eberly (2005), S. 150
8
Vgl. Eberly (2005), S. 487 f.
9
Vgl. Gregory (2009), S. 595
10
http://www.havok.com/
11
http://www.nvidia.de/object/nvidia_physx_de.html
12
Vgl. Gregory (2009), S. 41 f.
7
8
2 Game Engines
Frontend
Im Frontend eines Spiels trifft man häufig auf das sogenannte Heads-Up Display (HUD), wie
beispielsweise Energie- oder Munitionsanzeige. Zum Frontend gehören auch die Spielemenüs,
eine Konsole oder bestimmte Entwicklungswerkzeuge, die unter Umständen mit dem finalen
Produkt mitgeliefert werden. Außerdem zählt zum Frontend auch die grafische Benutzeroberfläche (GUI), über die der Spieler Aufgaben wie beispielsweise die Manipulation eines Inventars
vornehmen kann. Weiterhin gehören zu dieser Komponente Videos und Zwischensequenzen,
die während des Spiels gezeigt werden.13
Ressourcen Manager
Der Ressourcen Manager stellt meist eine Schnittstelle zur Verfügung, durch die Bestandteile
des Spiels, wie zum Beispiel Bitmaps, Modelle, Texturen oder Audiodateien zugänglich
gemacht werden. Einige Engines greifen auf eine Sofortlösung zurück und überlassen es dem
Spieleprogrammierer, die Rohdateien direkt auf der Festplatte oder innerhalb komprimierter
Archive abzurufen, wie etwa bei Quake 3.14 Als gutes Beispiel sei an dieser Stelle der
Ressourcenmanager von OGRE genannt, der in Kapitel 4 auf Seite 40 näher beschrieben wird.
Animationssystem
Animationen sind ein wichtiger Bestandteil in jedem Spiel. Dabei gibt es fünf verschiedene
Grundtypen von Animationen, die in Spielen verwendet werden:
• Sprite / Texture Animation
• Rigid Body Hierarchy Animation
• Skeletal Animation
• Vertex Animation
• Morph Targets
Bei Skeletal Animation wird ein detailliertes dreidimensionales Charakter Polygonnetz von
einem Animateur mit Hilfe eines relativ simplen Knochensystems positioniert. Wenn sich die
13
14
Vgl. Gregory (2009), S. 39
Vgl. Gregory (2009), S. 35
9
2 Game Engines
Knochen bewegen, bewegen sich die Vertices des dreidimensionalen Objektes mit. Skeletal
Animation ist heutzutage die am weitesten verbreitete Methode der Animation.15
Audiosystem
Das Audiosystem kümmert sich um entsprechende Effekte wie etwa 3D Sound und um die
Wiedergabe und Verwaltung von Audiodateien.
Netzwerkfunktionalität
Spiele haben heutzutage häufig einen Mehrspielermodus (engl. Multiplayer ), in dem mehrere
Spieler gegeneinander antreten können. Daher enthalten Game Engines häufig Netzwerkfunktionen. Integriert man einen Mehrspielermodus in ein Spiel, so muss das gesamte Konzept
bestimmter Komponenten dementsprechend angepasst werden. Die Quake Engine ist beispielsweise bekannt für ihren „client-on-top-of-server“ Modus, in dem jede ausführbare Datei (engl.
executable) auf einem einzelnen PC im Einzelspielermodus als Client und Server gleichzeitig
fungiert.16
Scripting
Viele Game Engines verwenden sogenannte Skriptsprachen, um die Entwicklung von spielspezifischen Regeln und Inhalten einfacher und schneller abwickeln zu können. Ohne Skriptsprachen
müsste das Spiel neu kompiliert und gelinkt werden, falls eine Änderung an der Logik oder
den Datenstrukturen vorgenommen wird. Mit Hilfe einer Skriptsprache können Änderungen
an der Spielelogik und den Daten durch Modifikation und Neuladen des Skriptcodes bewirkt
werden.17
Künstliche Intelligenz (KI)
Ursprünglich für gewöhnlich nicht als Teil einer Game Engine angesehen, wird zunehmend
erkannt, dass die selben Muster für künstliche Intelligenz in so ziemlich jedem KI System
auftauchen. Eine Firma namens Kynogon hat bereits eine kommerzielle KI Engine namens
Kynapse entwickelt, die als Grundlage für KI dienen kann. Auf dieser Grundlage kann dann
weitere spielespezifische KI entwickelt werden.18
15
Vgl.
Vgl.
17
Vgl.
18
Vgl.
16
Gregory
Gregory
Gregory
Gregory
(2009),
(2009),
(2009),
(2009),
S.
S.
S.
S.
42
44 f.
47
47
10
2 Game Engines
Nachdem in diesem Abschnitt ein Überblick über die wichtigsten Komponenten einer Game
Engine gegeben wurden, folgt im kommenden Abschnitt eine Beschreibung der signifikantesten
Game Engines.
2.2 Populäre Game Engines
Im Laufe der Jahre haben sich diverse Game Engines besonders hervorgehoben und auch
weiterentwickelt. Dazu zählen im kommerziellen Bereich unter anderem die Unreal Engine,
die CryEngine, die id Tech Engine, die Gamebryo Engine und die Source Engine. Im Open
Source bzw. kostenlosen Bereich existieren namhafte Engines wie beispielsweise Nebula Device,
Crystal Space, OGRE, Panda3D, jMonkey, XNA und die Irrlicht Engine. In diesem Abschnitt
sollen die signifikantesten Engines vorgestellt werden, selbstverständlich gibt es noch eine
Vielzahl weiterer Engines.
2.2.1 Kommerziell
Unreal Engine
Die Unreal Engine wurde von Epic Games im Jahre 1998 mit dem Spiel Unreal veröffentlicht.
Die aktuelle Version der Unreal Engine, Version 3, ist ein komplettes Entwicklungsframework
für DirectX10 fähige PCs, Xbox 360 und Playstation 3. Sie beinhaltet ein Renderingsystem,
ein Animationssystem, ein Physiksystem, ein Audiosystem, Netzwerkfunktionalität, ein eigenes
Scriptingsystem und mehrere Werkzeuge, beispielsweise für die Erstellung von Spielumgebungen, Materialien, Animationen und Benutzeroberflächen. Die Unreal Engine findet in einer
Vielzahl von Spielen wie beispielsweise der bekannten Unreal Tournament Serie Verwendung
und spielt auch auf Next-Generation-Konsolen eine wichtige Rolle.19 Die Unreal Engine ist
eine der bekanntesten Engines der Spielegeschichte.
Im Verlauf dieser Arbeit wurde das Unreal Development Kit veröffentlicht, mit dem kostenlos
für nichtkommerzielle Zwecke entwickelt werden kann.20
19
20
Vgl. Unreal Technology (2009a)
Vgl. Unreal Development Kit (2010)
11
2 Game Engines
id Tech Engine
Die id Tech Engine ist ebenfalls eine der bekanntesten Engines der Spielegeschichte und wurde
in verschiedenen Versionen in unterschiedlichsten Spielen eingesetzt. Die aktuelle Version
4 kam bisher in Titeln wie Doom 3, Quake 4, Prey und dem erst kürzlich veröffentlichten
neuesten Teil der Wolfenstein-Serie zum Zuge. Höhepunkte der id Tech 4 Engine sind
dynamisches Licht in Echtzeit und „MegaTexture“, wodurch „beispielloses Terrain-Detail“21
ermöglicht wird. Sie unterstützt verschiedene Plattformen wie beispielsweise PC, Mac, Xbox
360 und Playstation 3.22 Die id Tech Engine 5 befindet sich derzeit in Entwicklung und wird
als Zukunftstechnologie angepriesen.
Die Vorgänger id Tech 2 und id Tech 3 sind mittlerweile vom Entwickler unter der GPL Lizenz
als Open Source freigegeben. Sie wurden in bekannten Spielen wie Quake 2 und Quake 3
genutzt.23
CryEngine
Die CryEngine ist eine von Crytek24 entwickelte Engine aus Deutschland. Ursprünglich
von den Gebrüdern Yerli ins Leben gerufen, fand sie als Debüt im Spiel FarCry Verwendung. Die CryEngine Version 2 kam beispielsweise im Spiel Crysis zur Anwendung und wird
von der Mediadesign Hochschule für Design und Informatik25 zum Zwecke der Lehre und
Forschung eingesetzt. Version 2 der CryEngine umfasst verschiedene Effekte wie beispielsweise
Lichtberechnung in Echtzeit, volumetrische Wolken und Motion Blur. Zusätzlich gibt es
ein Audiosystem für Sound und Musik, einen Leveleditor, Netzwerkfunktionalität und ein
fortgeschrittenes System für künstliche Intelligenz. Darüber hinaus basiert sie auf einem
modularen Design, geschrieben in der Sprache C++.26 Derzeit befindet sich die Version 3
der CryEngine in Entwicklung.
Im Verlaufe der Arbeit erschien die CryEngine Version 3 in einer für Bildungszwecke kostenlosen
Version.27
21
ID Software (2009a)
Vgl. ID Software (2009a)
23
Vgl. ID Software (2009b)
24
http://www.crytek.com/
25
http://www.mediadesign.de/
26
Vgl. CryEngine 2 (2009)
27
Vgl. Crytek (2009)
22
12
2 Game Engines
Gamebryo Engine
Gamebryo ist eine flexible und plattformunabhängige Game Engine, die über eine Rendering
Engine mit Unterstützung für dynamisches Licht, Schatten, Materialien, ein Physiksystem, ein
Animationssystem, ein Terrainsystem zur Darstellung von Landschaften, einen Leveleditor und
Netzwerkfunktionalität verfügt. Darüber hinaus kann sie auch für Konsolen wie beispielsweise
die Nintendo Wii genutzt werden.28
Source Engine
Die Source Engine ist eine Game Engine, mit der bekannte Spiele wie Half-Life 2, Counter
Strike: Source und Team Fortress 2 entwickelt wurden. Sie ist eine hochqualitative Engine,
die mit der Unreal Engine 3 hinsichtlich der grafischen Möglichkeiten und der Werkzeuge
konkurriert.29 Source basiert auf einer modularen, komponentenbasierten Architektur, die
nahtlose Integration neuer Funktionalitäten und Technologien ermöglicht. Zur Engine gehören
ein Rendering System mit Shadern, Materialien, dynamischem Licht und Schatten, ein
Animationssystem inklusive Werkzeuge zur Erstellung von Animationen, ein Leveleditor, ein
Physiksystem, ein Audiosystem und Netzwerkfunktionalität. Die Source Engine kann auch für
Spielekonsolen wie beispielsweise Playstation 3 eingesetzt werden.30
2.2.2 Open Source / Kostenlos
Nebula Device
Nebula Device ist eine quelloffene Game Engine, die vom deutschen Entwicklerstudio Radon
Labs31 entwickelt wird und beispielsweise im Spiel Drakensang Verwendung findet. Sie enthält
eine DirectX9 Rendering Engine, die neuere Effekte wie Bump Mapping, Echtzeitschatten und
High Dynamic Range Rendering beherrscht. Sie verfügt über Systeme für Audio, Animation,
Eingabe und Scripting.32
28
Vgl. Gamebryo (2009)
Vgl. Gregory (2009), S. 26
30
Vgl. Source Engine (2009)
31
http://www.radonlabs.de/
32
Vgl. Nebula Device (2009)
29
13
2 Game Engines
Crystal Space
Crystal Space ist ein plattformunabhängiges Software Development Kit für 3D Grafik in
Echtzeit, mit speziellem Fokus auf Spieleentwicklung. Sie ist in C++ geschrieben und
verfügt über Fähigkeiten wie unter anderem Level of Detail, Kollisionserkennung und über
ein Soundsystem.33
OGRE
OGRE ist eine ausgereifte, stabile, zuverlässlige, flexible, plattformunabhängige und umfassende
Bibliothek für die Entwicklung von 3D Grafik Anwendungen in Echtzeit.34 OGRE wird auch in
kommerziellen Projekten verwendet. Nennenswert seien hier die Spiele des Entwicklerstudios
Deck1335 , wie beispielsweise Ankh, Venetica oder Jack Keane. OGRE wird in Kapitel 4 auf
Seite 40 ausführlich behandelt.
Panda3D
Panda3D ist eine 3D Game Engine, die derzeit von Disney und der Carnegie Mellon Universität
entwickelt wird. Sie ist eine Programmbibliothek für 3D Rendering und Spieleentwicklung.
Die Anwendungen von Panda3D werden für gewöhnlich mit C++ oder Python über ein sogenanntes Scripting Interface geschrieben, welches die Panda3D Bibliothek steuert. Panda3D
ist quelloffen und frei einsetzbar für jeglichen Zweck, auch für kommerzielle Entwicklung.36
Derzeit findet die Engine in zwei großen Online Rollenspielen Verwendung: Disneys Toowntown Online37 und Disneys Pirates of the Carribean Online38 . Beide Spiele können kostenlos
erworben und gespielt werden.
jMonkey Engine
jMonkey Engine (Abkürzung jME) ist eine leistungsstarke szenengraphbasierte Grafikschnittstelle.
Ein Großteil der Inspiration hinsichtlich des Designs stammt hierbei von Eberly (2005). jME
wurde entwickelt, um den Mangel an einer umfassenden in Java geschriebenen Grafik Engine
auszugleichen. jME ist vollständig quelloffen unter der Verwendung der BSD Lizenz. jME kann
33
Vgl. Crystal Space (2009)
Vgl. Junker (2006), S. 1 und S. 5
35
http://deck13.com/
36
Vgl. Panda3D (2009)
37
http://www.disney.co.uk/toontown/
38
http://piratesonline.go.com/v3/#/community/community-home.html
34
14
2 Game Engines
in jedweder Art verwendet werden, privat sowie kommerziell. Die Engine besitzt eine szenengraphbasierte Architektur. Darüber hinaus beherrscht sie verschiedene Typen von Geometrie,
wie beispielsweise Bezier Patches, Linien, Punkte, Modelle wie Milkshape, MD2, ASE und
weiteren, Terrain, Level of Detail und mehr. Außerdem beherrscht jME High-Level-Effekte
wie Render to Texture, Environment Mapping und Partikel Systeme.39
Irrlicht Engine
Die Irrlicht Engine ist eine quelloffene 3D Engine. Sie ist in C++ geschrieben und auch für
.NET Sprachen verfügbar. Sie ist komplett plattformunabhängig, beherrscht Direct3D und
OpenGL, besitzt einen eigenen Software Renderer und verfügt über alle aktuellen Eigenschaften,
die in kommerziellen 3D Engines vorzufinden sind. Es gibt eine riesige aktive Gemeinschaft
und viele Projekte, die sich in Entwicklung befinden und die Engine verwenden. Man kann im
gesamten Web Erweiterungen und Verbesserungen für Irrlicht finden, wie alternative Terrain
Renderer, Portal Renderer und Editoren.40
XNA
XNA ist eine noch recht junge Entwicklung von Microsoft. Die Abkürzung XNA ist ein
Wortspiel und steht für „XNA is not an Acronym“. Mit Microsoft XNA ist es erstmals möglich,
als nicht professioneller Spieleentwickler Ein- und Mehrspielerspiele zu erstellen, die auf dem
PC, der Xbox 360 Konsole und dem Zune laufen.41 XNA ist eine einfach zu verwendende
und leicht zugängliche Plattform für Spieleentwicklung. Ziel ist es, Spieler zu fördern, damit
sie ihre eigenen Spiele entwickeln und diese mit der Online Community teilen, so wie es etwa
YouTube42 mit Videos macht. XNA basiert auf Microsofts Programmiersprache C# und
der Common Language Runtime (CLR). Die primäre Entwicklungsplattform ist dabei Visual
Studio oder das freie Gegenstück Visual Studio Express.43
39
Vgl. jMonkeyEngine (2009)
Vgl. Irrlicht (2009)
41
Vgl. Lobao u. a. (2009), S. xxi
42
http://www.youtube.com
43
Vgl. Gregory (2009), S. 26 f.
40
15
2 Game Engines
2.3 Anwendungsgebiete
Game Engines werden heutzutage nicht nur zur Realisierung von Computer- und Videospielen
verwendet. Es existieren viele weitere Anwendungsgebiete. Beispielsweise werden sie bei der
Visualisierung von Gebäuden und Landschaften, in der Medizin oder in Schulen eingesetzt. In
diesem Abschnitt werden wichtige Bereiche für die Anwendung von Game Engines vorgestellt
und erläutert.
2.3.1 Spiele
Der ursprüngliche Zweck von Game Engines lag selbstverständlich in der Entwicklung von
Spielen. Game Engines erleichtern die Entwicklung von Spielen, da sie eine Wiederverwendung bedeutsamer Teile von Softwarekomponenten ermöglichen. Hierbei wird eine Trennung
der Softwarekomponenten vorgenommen, wie beispielsweise der Kollisionserkennung, der
Rendering Engine und dem Audiosystem.44 Im vorangegangenen Abschnitt wurden bereits
signifikante Beispiele für Game Engines und deren Komponenten genannt.
2.3.2 Virtuelle Realität und Simulationen
In der Arbeit von Mól u. a. (2008) wird die Entwicklung einer virtuellen Gebäude-EvakuierungsSimulation auf Basis einer Game Engine beschrieben. Simulationen benötigen eine ausreichende
Möglichkeit der dreidimensionalen grafischen Darstellung. Für realistische Ergebnisse müssen
dabei auch die Auswirkungen physikalischer Gesetze, wie beispielsweise Gravitation und Kollisionskräfte berücksichtigt werden. Eine Eigenentwicklung für diesen Zweck wäre aufwändig.
Einige Game Engines erfüllen dabei die Anforderungen der Simulationen virtueller Realität.
Im Rahmen der Arbeit wurde ein dreidimensionales Modell des IEN (Instituto de Engenharia Nuclear, Nuclear Engineering Institute) erstellt, um vorbeugende Evakuierungstests
durchzuführen und somit die Evakuierungsplanung zu unterstützen. Eine virtuelle Simulation eignet sich in einer gefährlichen Umgebung wie einem Kernkraftwerk besser als eine
Evakuierungsübung in echter Umgebung - beispielsweise um Feuer, Rauch oder radioaktive
bzw. chemische Kontamination zu simulieren. Ziel der Tests ist es, Einsichten und Vorschläge
44
Vgl. Gregory (2009), S. 11
16
2 Game Engines
über Gebäude- und Bürogrundrisse, wie beispielsweise die Lage von Treppen und deren Dimensionen oder alternative Fluchtwege zu erhalten. Die Vorteile liegen hier in der Flexibilität von
Game Engines, da sie meist unabhängig von den Szenarios oder Anwendungen sind, für die sie
ursprünglich entwickelt wurden. Darüber hinaus ist der Quellcode für manche Game Engines
teilweise offen verfügbar. Daher können sie für komplett neue Szenarien und Anwendungen
verwendet werden. In dieser Arbeit wurde mit der Unreal Engine 2 Runtime Demo Version
gearbeitet, einer eingeschränkten Version der Unreal Engine 2.
Abb. 2.1: Anwendungsgebiet virtuelle Realität / Simulation: Evakuierung eines Gebäudes
(Vgl. Mól u. a. (2008))
Eine weitere Arbeit von Jacobson und Lewis (2005) handelt von CaveUT, einem quelloffenen
und kostenlosen Projekt basierend auf dem Spiel Unreal Tournament, welches projektionsbasierte virtuelle Realität (VR) erschwinglich und zugänglich macht. Dabei modifiziert CaveUT
Unreal Tournament in dem Maße, dass es die Bilder auf mehreren Displays darstellt. Der
Betrachter wird dabei von den Displays umgeben. Dies ist besonders für VR Anwendungen
geeignet. Ein Mehrfachbildschirmdisplay basierend auf CaveUT benötigt einen Server Computer, der sich zu mehreren Client Computern verbindet. Jeder Client betreibt dabei einen
Bildschirm auf dem Display. Dieses Display ist für gewöhnlich eine Projektionswand, die von
einem digitalen Projektor beleuchtet wird. Dabei wird ein gewöhnliches Mehrspielerspiel in
Unreal Tournament mit einem normalen Spieler auf dem Server und jeweils einem Zuschauerspieler auf jedem der Clients gestartet. Jeder Zuschauer dupliziert dabei den Sichtbereich
17
2 Game Engines
des Spielers auf dem Server. Auf jedem Client rotiert CaveUT die Sicht in die virtuelle Welt,
so dass jeder Bildschirm den entsprechenden Teil der zusammengesetzten Sicht zeigt. Um
dies perspektivisch korrekt darzustellen, benutzt CaveUT VRGL45 . Dies ist eine OpenGL
Bibliothek, die speziell für VR Anwendungen angepasst wurde.
Abb. 2.2: Anwendungsgebiet virtuelle Realität / Simulation: Mehrfachbildschirmdisplay auf
Basis von Unreal Tournament (Vgl. Jacobson und Lewis (2005))
2.3.3 Informationsvisualisierung
Bei der Informationsvisualisierung (engl. information visualization) geht es um die Verwendung interaktiver visueller Repräsentationen, um die Wahrnehmung zu verstärken.46 Für diese
neuartige Disziplin der Darstellung wird vermehrt auch auf Game Engines zurückgegriffen.
Kot u. a. (2005) entwickelten mit Hilfe der Quake 3 Engine ein Werkzeug, mit dem Quellcodes besser verständlich gemacht werden können. Die meisten Werkzeuge verwenden für
diesen Zweck textuelle oder zweidimensionale schematische Diagramme, andere verwenden
45
46
http://planetjeff.net/html/pro_vrgl.html
Vgl. Ware (2004)
18
2 Game Engines
dreidimensionale Darstellungen. Ziel der Arbeit war es, in einer dreidimensionalen virtuellen
Umgebung Metaphern zu verwenden, um Beziehungen im Code darzustellen und Interaktionen
mit Informationsgegenständen zu unterstützen. Es sollten darüber hinaus mehrere Nutzer
den Code gemeinsam verstehen können, beispielsweise durch Besichtigung des Codes in der
Spielwelt, durch Kommentierung des Codes und über kommunikative Mittel. Um dies nicht
alles selbst entwickeln zu müssen, wurde hierbei auf eine Game Engine zurückgegriffen. Kernanforderung war es, Quellcodedateien als dreidimensionale Objekte in einer dreidimensionalen
Welt und Beziehungen und Querverweise zwischen deren Abhängigkeiten darzustellen.47
Abb. 2.3: Anwendungsgebiet Informationsvisualisierung: Quellcode verständlich machen. Links
sieht man die Darstellung einer Header-Datei und einer Implementierungs-Datei
aus der Sprache C als dreidimensionale Objekte. Rechts sieht man die textuelle
Darstellung von Code. Beides unter der Verwendung der Quake 3 Engine (Vgl. Kot
u. a. (2005))
2.3.4 Visualisierung von Gebäuden und Landschaften
Fritsch und Kada (2004) beschreiben in ihrer Arbeit die Darstellung von Gebäuden und
Landschaften mit Hilfe einer Game Engine. Hier lägen laut den Autoren die Vorteile vor
allem bei den Kosten und der ausgezeichneten Darstellungsperformanz sowie der ständigen
Weiterentwicklung der Game Engines.48 Manche Game Engines sind dabei speziell auf
47
48
Vgl. Kot u. a. (2005), S. 53 f.
Vgl. Fritsch und Kada (2004), S. 621
19
2 Game Engines
Innen- bzw. Außenräume spezialisiert. Die Autoren gehen hierbei auf die Quake 3 Engine für
Innenräume und die Unreal Engine 2 für Außenräume ein. In einer weiteren Arbeit von Herrlich
(2007) geht es um die Entwicklung eines Prototyps für ein Werkzeug für Landschaftsarchitektur
basierend auf der CryEngine von Crytek.
Abb. 2.4: Anwendungsgebiet Gebäudevisualisierung: Darstellung eines Innenraums (Vgl.
Fritsch und Kada (2004))
2.3.5 Medizin
Auch im medizinischen Bereich gibt es Ansätze für die Verwendung von Game Engines. Marks
u. a. (2007) untersuchen in ihrer Arbeit die Tauglichkeit von Game Engines für die Entwicklung
von Anwendungen für die medizinische Ausbildung und simuliertes chirurgisches Training.
Die zunehmende Komplexität und die zunehmenden Kosten von chirurgischem Training und
der konstanten Weiterentwicklung chirurgischer Vorgehensweisen sind verantwortlich für die
Auslagerung des chirurgischen Trainings in eine virtuelle Umgebung. Selbstverständlich gibt
es kommerzielle Simulatoren für die Bereiche der Medizin, bei denen allerdings die immensen
Kosten einen Nachteil darstellen.49 Game Engines bieten hier außer dem Kostenfaktor auch
technische Vorteile, wie beispielsweise die ständige Aktualisierung und Anpassung der Engines
an die Grafik Hardware sowie der grafischen Algorithmen. Durch Netzwerkfähigkeit ist es
möglich, ohne physische Grenzen weltweit kooperativ Aufgaben auszuführen. Dies wird durch
49
Vgl. Marks u. a. (2007), S. 273
20
2 Game Engines
die Verwendung von kommunikativen Mitteln wie Headsets oder textuellem Chat sicher
gestellt. Darüber hinaus können Game Engines unterschiedliche Sprachen verwalten. Die
Benutzeroberflächen, der Sound und die Eingabegeräte können ebenfalls angepasst werden.
Ein weiterer Vorteil ist der visuelle Realismus, hervorgerufen durch grafische Effekte wie unter
anderem Bump Mapping, Schatten und Tiefenschärfe. Dabei wurden die Engines anhand
verschiedener Aspekte getestet, wie beispielsweise der Möglichkeit zur Erstellung eigener
Inhalte oder die physikalische Interaktion mit den Modellen innerhalb des Spiels.50
Abb. 2.5: Anwendungsgebiet Medizin: Simuliertes chirurgisches Training mit einer Game
Engine (Vgl. Marks u. a. (2007))
2.3.6 Lehre
Für den Bereich der Lehre existieren bereits ebenfalls zahlreiche Einsatzmöglichkeiten. Ein
Beispiel zeigen Shabanah und Chen (2009): Hierbei geht es um die Lehre von Algorithmen mit
Hilfe eines Ansatzes namens „AVuSG“, Algorithm Visualization using Serious Games. Wie aus
dem Namen ersichtlich, geht es um die Visualisierung von Algorithmen mit Hilfe von Serious
Games. Dabei wird ein Algorithmus in vier Formen visualisiert: als Text, als Flussdiagramm,
als Demonstration eines Spiels und als Spiel selbst. Weiterhin integriert der AVuSG Ansatz
50
Vgl. Marks u. a. (2007), S. 275 ff.
21
2 Game Engines
Lerntheorien und Modelle zusätzlich zur Motivationstheorie, um drei Lernmodelle einzuführen,
die das Lernen von Algorithmen vereinfachen sollen. Derzeit wird ein ähnliches Thema in einer
Abschlussarbeit von Marinska (2010) an der Hochschule Reutlingen behandelt. Dabei geht es
um die Lehre von Softwaretechnik und theoretischen Grundlagen mit Hilfe von Serious Games.
Eine weitere Idee für die Lehre zeigen Burd u. a. (2007) oder etwa Shultz (2006), welcher die
Verwendung einer Game Engine für die Lehre von Informatik mit Hilfe einer auf pädagogische
Zwecke ausgelegten Game Engine beschreibt. Die Entwicklung von Computerspielen wirkt laut
dem Autor höchst motivierend auf viele Studenten, die gerade erst mit Informatik beginnen.
Die Studenten lernen dabei im Rahmen eines Seminars den Umgang mit Schleifen, Variablen,
der Erstellung von Objekten und Methodenaufrufen während sie die Klassen verwenden, die
von der Game Engine bereitgestellt werden.
Betrachtet man die vielseitigen Anwendungsgebiete von Game Engines, lässt sich das große
Potential der Game Engines erkennen. Um nun zu prüfen, ob sie sich für die Lehre im Bereich
der Computer Grafik eignen, wird im folgenden Verlauf der Arbeit eine Evaluierung geeigneter
Engines für den Einsatz in der Lehre vorgenommen.
22
3 Evaluierung der Game Engines
Dieses Kapitel behandelt die Vorgehensweise und die Methoden, mit denen die entsprechenden
Game Engines ausgewählt und bewertet werden. Es wird dabei genauer auf die Methode der
Entscheidungsfindung, die Auswahl der Kriterien, die Kriterien an sich, deren Gewichtung und
die daraus resultierenden Ergebnisse eingegangen. Weiterhin werden die Ansätze für die Lehre
sowie die Demonstration der Engine und die Auswertung der Ergebnisse eines Fragebogens
zur Evaluierung der im Rahmen dieser Thesis entwickelten Anwendung behandelt.
3.1 Vorgehensweise
Im ersten Schritt wird hierbei zunächst mit der Recherche nach diversen Game Engines
begonnen. Dabei helfen vor allem die Internetseiten DevMaster.net1 sowie die deutsch- und
englischsprachige Version von Wikipedia2 , welche einen guten Überblick über die vielen
verfügbaren Engines bieten. Diese Engines werden anschließend tabellarisch festgehalten und
nach kommerziellen und quelloffenen bzw. kostenlosen Engines sortiert. Im weiteren Verlauf
muss ein Bewertungssystem für die Bewertung der Engines erarbeitet werden. Hierfür wird
ein Verfahren aus der Betriebswirtschaftslehre verwendet. Die Bewertung der Engines erfolgt
anhand einer einfachen Variante der Nutzwertanalyse. „Die Nutzwertanalyse ist ein formalisiertes Verfahren zur Entscheidungsfindung oder -vorbereitung, wenn es um eine Auswahl von
Handlungsalternativen unter Berücksichtigung eines mehrdimensionalen Zielsystems geht“.3
„Den Anfang einer Nutzwertanalyse bildet die Entwicklung eines Zielsystems - es sei denn,
es könnte auf ein bereits existierendes Zielsystem zurückgegriffen werden“.4 Da noch kein
Zielsystem existiert, muss zunächst solch ein Zielsystem entwickelt werden. Das übergeordnete
1
http://www.devmaster.net/engines/
http://de.wikipedia.org/
3
Adam (1996), S. 412
4
Brede (2005), S. 268
2
23
3 Evaluierung der Game Engines
Ziel stellt hierbei das Finden einer geeigneten Game Engine dar. Für dieses Zielsystem müssen
am Anfang zunächst Teilziele erarbeitet werden. Diese vereinen später weitere Teilziele unter
sich, die im Folgenden als Kriterien bezeichnet werden.
Abb. 3.1: Nutzwertanalyse: Das Zielsystem
Dabei wurden im Bezug auf die Engines folgende Teilziele und deren Kriterien selbstständig
erarbeitet:
Teilziel Community
Nr.
Kriterium
Beschreibung
Gewichtung
1
Größe / Support /
Wird die Engine weiterhin gepflegt? Gibt es ein Forum, in
14
Qualität
dem man Unterstützung erhält? Gibt es Projekte, die die
Engine nutzen? Wer entwickelt / erweitert die Engine?
2
Vorhandene Beispiele
Gibt es genügend Beispiele, anhand derer die Engine
12
erlernt werden kann? Wie ist die Qualität der Beispiele?
Tab. 3.1: Kriterien für die Game Engines: Teilziel Community
Hierbei handelt es sich um das Teilziel der „Community“. Unter diesem Teilziel befinden sich
alle Kriterien, die mit der Gemeinschaft rund um eine Game Engine zusammenhängen.
24
3 Evaluierung der Game Engines
Teilziel Technische Aspekte / Möglichkeiten
Nr.
Kriterium
Beschreibung
Gewichtung
3
Unterstützte Tools
Gibt es Unterstützung für gängige Modellierungswerkzeuge
9
wie 3dsmax, Maya, Milkshape, Blender? Werden Formate
für Animationen unterstützt?
4
Programmiersprache(n)
Welche Programmiersprache(n) werden verwendet? C++
7
spielt in der Spieleentwicklung eine große Rolle, der
Studiengang hat seinen Fokus aber nicht auf
Spieleentwicklung, sondern Programmierkonzepte.
5
Umfang, Funktionen
Handelt es sich um eine reine Render- Engine oder werden
und Features
typische Funktionen einer Game Engine angeboten wie
10
zum Beispiel Kollisionserkennung, Level Editoren,
Szenengraphen etc.? Bietet die Engine moderne Effekte
und Verfahren wie beispielsweise Bump Mapping, Physik,
Heightmaps etc.?
6
Aufbau und Struktur
Eine Engine mit objektorientiertem Aufbau erleichtert die
8
Programmierung und macht sie übersichtlicher. Ist die
Engine modular aufgebaut? Kann sie leicht erweitert
werden?
7
Unterstützte
Auf welchen Betriebssystemen ist die Entwicklung und
Plattformen und
Ausführung möglich? Welche grafischen Schnittstellen
Schnittstellen
werden unterstützt?
6
Tab. 3.2: Kriterien für die Game Engines: Teilziel Technische Aspekte / Möglichkeiten
Das Teilziel „Technische Aspekte / Möglichkeiten“ beinhaltet alle Kriterien, die in irgendeiner
Weise mit dem technischen Hintergrund einer Engine zusammenhängen.
25
3 Evaluierung der Game Engines
Teilziel Erlernbarkeit
Nr.
Kriterium
Beschreibung
Gewichtung
8
Komplexität und
Wie ist die Lernkurve? Ist die Engine einfach aufgebaut
12
Lernkurve
und leicht zu verstehen? Wie leicht gelingt der Einstieg?
Können relative Anfänger mit der Engine umgehen? Dies
ist wichtig, da die Engine innerhalb kurzer Zeit erlernt
werden sollte
9
Verfügbare Literatur
Gibt es Artikel, Bücher etc., die beim Erlernen / Erläutern
10
der Engine hilfreich sind?
10
Dokumentation
Ist die Engine gut dokumentiert? Gibt es ein Wiki, eine
12
Anleitung und eine Referenz für die
Programmierschnittstelle? Wie ist die Qualität von diesen?
Tab. 3.3: Kriterien für die Game Engines: Teilziel Erlernbarkeit
Unter dem Teilziel der „Erlernbarkeit“ werden die Kriterien zusammengefasst, die mit der
Einarbeitung und der Schwierigkeit des Umgangs mit der Engine in Verbindung stehen.
Bei der Nutzwertanalyse ist es meist nicht möglich, die Unabhängigkeit der einzelnen Teilziele
zu bewahren.5 Da in diesem Fall beispielsweise die Lernkurve auch ein Stück weit mit den
vorhandenen Beispielen, dem Support der Community und den Programmiersprachen verbunden ist, lässt sich auch hier keine vollständige Unabhängigkeit erreichen. Die Nutzwertanalyse
kann somit „lediglich als vereinfachendes, heuristisches Vorgehen“6 bezeichnet werden.
Bei der Erschließung der Kriterien hilft eine intensive Recherche der Internetpräsenzen der
jeweiligen Engines, sowie Wikipedia und DevMaster.net, welche einen umfassenden Überblick
über die wichtigen Aspekte einer Game Engine bieten. DevMaster.net verfügt zusätzlich
über ein System für Rezensionen, bei dem die Benutzer ihre Erfahrungen mit den Engines
schildern können. Daraus lassen sich Kriterien für alle drei Teilziele erschließen. Die Kriterien
und deren jeweiligen Beschreibungen können den Tabellen 3.1, 3.2 und 3.3 entnommen
werden. Anschließend erfolgt die Gewichtung der jeweiligen Kriterien nach ihrer Relevanz dargestellt in Abbildung 3.1 auf Seite 24 als kleine Zahlen unter den Kriterien. Auch hier
ist eine gewisse Subjektivität nicht zu vermeiden. Manche Personen würden möglicherweise
die Programmiersprachen höher gewichten, weil sie ihrer Meinung nach eine größere Rolle
spielen. Oder sie würden den Aufbau und die Struktur einer Engine weit geringer gewichten,
5
6
Vgl. Adam (1996), S. 414 f.
Adam (1996), S. 415
26
3 Evaluierung der Game Engines
weil dieses Kriterium aus ihrer Sicht weniger wichtig erscheint. Näheres zu der Gewichtung
der Kriterien folgt im Abschnitt 3.2 auf Seite 29. Zusätzlich zu den herkömmlichen Kriterien
existieren zwei weitere sogenannte „K. O. Kriterien“: Zum einen müssen die Engines kostenlos
und unter einer freien Lizenz verfügbar sein und zum anderen müssen sie die Fähigkeit besitzen, dreidimensionale Bilder darzustellen. Eine Engine, die lediglich zweidimensionale Bilder
darstellen kann, wäre zur Vermittlung der Theorie der Computer Grafik nicht ausreichend
geeignet. Eine genauere Beschreibung bezüglich der Entscheidung, nur kostenlose und unter
einer freien Lizenz stehende Engines zu verwenden, findet sich am Ende dieses Abschnitts.
Nach der Gewichtung ist das Zielsystem vollständig und es kann mit der Bewertung der jeweiligen Game Engines begonnen werden. Dies geschieht mit Hilfe der sogenannten Zielerreichungsbzw. erfüllungsgrade. Diese beschreiben die Qualität der Erfüllung für ein entsprechendes
Kriterium auf einer Skala. Dabei können die Kriterien mit „1“ (schlecht), „2“ (befriedigend),
„3“ (gut) und „4“ (sehr gut) bewertet werden. Dazwischen gibt es ebenfalls Bewertungen wie
beispielsweise „3.5“ (sehr gut bis gut).
Abb. 3.2: Nutzwertanalyse: Zielerreichungsgrade
Eine feinere Abstufung ist nicht möglich bzw. nötig, da die Bewertung anhand einer relativ
oberflächlichen Recherche vorgenommen wird. Dadurch ist es kaum möglich, feine Detailunterschiede der Engines festzustellen. Dies geschieht erst mit dem praktischen Direktvergleich
der Engines, siehe Abschnitt 3.4, Seite 34. Ein Zielerreichungsgrad unter „1“ ist nicht möglich,
dies ist die schlechteste Bewertung. Ob ein Kriterium wie beispielsweise die Dokumentation
gar nicht oder nur rudimentär vorhanden ist, spielt letztendlich keine Rolle. Tatsächlich verfügen die meisten Engines auch über die grundlegenden Anforderungen der Kriterien. Kaum
eine Engine könnte es sich erlauben, ohne Dokumentation veröffentlicht zu werden. Somit
können nun die tatsächlichen Erreichungsgrade bestimmt werden. Hierfür werden die Engines
anhand der Kriterien geprüft. Diese Prüfung geschieht durch eine Recherche der jeweiligen
Internetpräsenzen, Wikis, Dokumentationen, Foreneinträge, Rezensionen und Beispiele der
27
3 Evaluierung der Game Engines
Engines. Die Zielerreichungsgrade werden anschließend mit den entsprechenden Gewichtungen für die jeweiligen Kriterien multipliziert. Dadurch werden die letztendlichen Nutzwerte
berechnet. Um alternative Ergebnisse (Nutzwerte) zu erhalten, wäre es natürlich möglich, die
Gewichtung anzupassen bzw. alternative Erreichungsgrade festzulegen. Die Berechnung der
Nutzwerte wird dabei mit Hilfe einer Tabellenkalkulation vorgenommen, die automatisch die
Gewichtung mit den Erreichungsgraden multipliziert. Anschließend werden die Engines und
deren Bewertung nochmals hinsichtlich der Kriterien untersucht und manche Erreichungsgrade
angepasst. Dadurch entstehen nun die endgültigen Ergebnisse. Hierbei werden die drei Engines
mit der höchsten Bewertung für das weitere Auswahlverfahren gewählt, der Rest der Engines
wird aussortiert. Dieses erste Auswahlverfahren dient der groben Filterung, um ungeeignete
Engines auszuschließen. Eine genauere Beschreibung der Ergebnisse wird in Abschnitt 3.3 auf
Seite 31 gegeben, die des weiteren Vorgehens wird in Abschnitt 3.4 auf Seite 34 dargestellt.
Man beschränkt sich in dieser Arbeit auf quelloffene bzw. kostenlose Engines. Die Gründe
dafür sind vielfältig. Zum einen gibt es insgesamt eine große Anzahl an Engines. Würde
man bei der Auswahl zusätzlich kommerzielle Engines testen, so würde dies den Rahmen
sprengen. Darüber hinaus ist es bei kommerziellen Engines oft schwieriger, einen Einblick
zu erhalten, da häufig keine offenen Beispiele im Internet verfügbar sind. Quelloffene und
kostenlose Engines sind außerdem wesentlich schneller und einfacher verfügbar, da nicht erst
eine Lizenz erworben werden muss. Dies ist auch aufgrund mangelnden Geldes ein großer
Vorteil. Häufig bieten die Hersteller kommerzieller Engines nicht einmal eine Testversion an.
Und Versionen für Bildungszwecke sind entweder recht teuer oder die Versionen sind so sehr
im Funktionsumfang eingeschränkt, dass nicht einmal Zugriff auf den Quellcode möglich
ist. Ein Beispiel: Für die nicht aktuelle Version der Unreal Engine (Version 2) muss man
für kommerzielle Zwecke rund 350.000 US Dollar zahlen.7 Es existiert hierfür eine Version,
die Unreal Engine 2 Runtime, die allerdings sehr stark eingeschränkt ist und allenfalls für
technische Demos taugen könnte.8 Bei Open-Source-Engines hat man meist eine öffentlich
zugängliche API Dokumentation und viele Beispiele. Darüber hinaus erhält man kostenlosen
und oft auch sehr guten und schnellen Support in den Foren. Eine freie Lizenz spricht nicht
nur für die Flexibilität der Engine, weil der Quellcode offenliegt und sie somit von jeder Person
erweitert werden kann. Es bilden sich dadurch auch größere Gemeinschaften, da es mehr
Leuten ermöglicht wird, sich mit der Engine auseinanderzusetzen. Weiterhin ist es durch eine
7
8
Vgl. Unreal Technology (2009b)
Vgl. Unreal Technology (2009c)
28
3 Evaluierung der Game Engines
freie Lizenz meist ohne Probleme möglich, das entstehende Produkt zu verbreiten, oftmals
auch in kommerzieller Hinsicht. Heutzutage werden auch im kommerziellen Bereich - sei es
nun die Spieleentwicklung oder andere Bereiche - häufig Open Source Engines verwendet, die
oft ohne weiteres mit kommerziellen Engines konkurrieren können. Ein Beispiel sei hier OGRE,
welche ebenfalls im kommerziellen Bereich eingesetzt wird, siehe Abschnitt 2.2.2 auf Seite 14.
Die Lizenz und die Kosten sind daher K. O. Kriterien bei der Auswahl der Engines.
3.2 Gewichtung der Kriterien
Dieser Abschnitt geht genauer auf die Kriterien ein, die bei der Bewertung der Engines
verwendet werden. Hier soll erklärt werden, warum die einzelnen Kriterien ihre entsprechende
Gewichtung erhielten. Die Kriterien wurden zuvor anhand der wichtigsten Aspekte einer
Engine mit Hinblick auf die Erlernbarkeit erarbeitet. Dabei wurden sie im Verlauf der Arbeit
mehrfach überarbeitet und mit dem betreuenden Professor abgestimmt.
Das oberste Ziel der Nutzwertanalyse, das Finden einer geeigneten Game Engine, „vereinigt
in sich die Gesamtheit - also 100% - aller Zielvorstellungen, die mit dem Projekt verfolgt
werden sollen.“9 Daher erscheint unter dem obersten Ziel die Zahl 100. Entsprechend wird
im ersten Durchlauf eine ungefähre Gewichtung vorgenommen, so dass die Teilziele in der
Summe 100 ergeben. Daraufhin werden die Kriterien erneut überarbeitet und in weiteren
Durchläufen die Gewichtung entsprechend angepasst, bis die finale Gewichtung erreicht wird.
Wie im vorigen Abschnitt erwähnt, ist die Gewichtung hierbei subjektiv geprägt und erlaubt
auch eine alternative Gewichtung.
Größe der Community und Support wird mit einer Gewichtung von 14 am höchsten
eingestuft, da dies einer der wichtigsten Punkte einer Game Engine ist. Eine gute Community
gibt nicht nur Hilfestellung bei der Einarbeitung und bei Problemen bezüglich der Engine,
sondern erweitert und verbessert sie auch aktiv und hält sie somit über einen längeren Zeitraum
am Leben.
Vorhandene Beispiele wird mit 12 gewichtet. Die vorhandenen Beispiele werden unter
dem Teilziel „Community“ angelegt, da die Anzahl der vorhandenen Beispiele, Tutorials und
bestehenden Projekte häufig von der Community abhängen. Die Beispiele helfen enorm bei
9
Brede (2005), S. 268
29
3 Evaluierung der Game Engines
der Einarbeitung und dem Verständnis mit dem Umgang einer Engine. Darüber hinaus zeigen
sie oftmals verschiedene Ansätze und Lösungsmöglichkeiten.
Unterstützte Tools wird mit 9 Punkten gewichtet. Für die zusätzliche Erstellung von
Inhalten, wie beispielsweise dreidimensionale Modelle, sind externe Werkzeuge nötig. Daher
ist es wichtig, dass die Formate, die bei den Engines zum Einsatz kommen, auch von den am
weitesten verbreiteten Werkzeugen unterstützt werden.
Programmiersprache(n) wird mit 7 gewichtet. Diesem Kriterium darf keine zu wichtige Rolle
zugemessen werden. Im besten Fall werden von den Engines mehrere Programmiersprachen
unterstützt, damit man selbst zwischen den Sprachen wählen kann. Die wichtigste Sprache der
Spieleentwicklung, C++, sollte allerdings unterstützt werden. Java käme hier beispielsweise
nicht in Frage, da sie in der Spieleentwicklung kaum eine Rolle spielt.
Umfang, Funktionen und Features wird mit 10 gewichtet. Die Engines sollten über die
gängigsten Verfahren verfügen, wie beispielsweise aktuelle grafische Effekte und grafische
Verfahren. Damit ist sichergestellt, dass auch aktuelle Themengebiete der Theorie von
Computer Grafik gelehrt werden können. Werden weitere Funktionen, wie Kollisionserkennung
oder ein Szenengraph unterstützt, so erleichtert dies den Umgang mit der Engine.
Aufbau und Struktur wird mit 8 gewichtet, da eine monolithische Struktur es verwehrt,
eine Engine auf einfache Art zu erweitern. Der Aufbau und die Struktur unterstützen also
die Flexibilität einer Engine und vereinfachen die Verwendung. Dadurch erhöhen sich auch
die Möglichkeiten seitens der Community, die Engine zu erweitern und zu verbessern. Ein
objektorientierter Aufbau erleichtert dabei ebenfalls den Umgang mit der Engine und dient
der Lehre der Programmierkonzepte.
Unterstützte Plattformen und Schnittstellen wird mit 6 am geringsten gewichtet. Die
Plattformunabhängigkeit darf hier keine übergeordnete Rolle spielen. Allerdings sind die
Schnittstellen OpenGL und Direct3D wichtig für die Lehre der Computer Grafik und in vielen
Fällen unterstützen plattformunabhängige Engines beide Schnittstellen. Dadurch wird die
Engine auch für mehr Personen einsetzbar, die unterschiedliche Betriebssysteme verwenden.
Komplexität und Lernkurve wird mit 12 gewichtet. Es ist sehr wichtig, dass die Engine
schnell erlernbar und gut verständlich ist. Die Einarbeitung in eine komplexe Engine mit hoher
Lernkurve ist zeitintensiv. Berücksichtigt man die kurze Zeit eines Semesters, wirken eine
geringe Komplexität und eine niedrige Lernkurve unterstützend.
30
3 Evaluierung der Game Engines
Verfügbare Literatur wird mit 10 gewichtet. Literatur hilft nicht nur bei der wissenschaftlichen
Arbeit mit der Thesis, sondern auch beim Erlernen der Engine. Ein gutes, übersichtliches
Buch oder ein umfassender Artikel gehen mehr ins Detail als ein herkömmliches Tutorial
oder andere vergleichbare Beispiele und stellen Zusammenhänge und Hintergründe besser dar.
Darüber hinaus erhält man die Informationen auf einen Blick und muss sie nicht erst im Netz
zusammensuchen.
Dokumentation wird mit 12 gewichtet. Die Dokumentation spielt eine große Rolle. Im
Wiki werden Einführungen, Installationsanleitungen und Lösungen für Probleme präsentiert.
Außerdem wird Hilfe für Erweiterungen gegeben. Die Dokumentation der Schnittstellen ist
wichtig für den Einstieg sowie die weitere Arbeit mit einer Engine.
3.3 Ergebnisse der Nutzwertanalyse
Gemessen anhand der ermittelten Nutzwerte gehen drei Engines als beste hervor: Microsofts
XNA, Irrlicht und OGRE. Die Bewertung soll bei diesen Engines an dieser Stelle nun genauer
betrachtet werden. Die restlichen Tabellen der Nutzwerte für die jeweiligen Engines finden
sich im Anhang auf Seite 93. Die Kriterien befinden sich in den Tabellen ab Seite 24.
XNA erreicht im Vergleich zu anderen Engines einen immer noch sehr guten Nutzwert. Die
höchsten Erreichungsgrade hat XNA bei den unterstützten Tools, beim Aufbau und der
Struktur und bei verfügbarer Literatur und der Dokumentation.
XNA nutzt das .x bzw. .fbx Format, das von jedem größeren, aber auch von vielen kleineren
Modellierungswerkzeugen unterstützt wird. Auch beim Aufbau und der Struktur verfügt
XNA über einen sehr guten Ansatz. Die Struktur wird dabei durch das XNA Game Studio
vorgegeben, dadurch lassen sich einheitliche Programme schreiben. Es wird die Erstellung
sogenannter Game Components ermöglicht, die in verschiedenen Projekten wiederverwendet
oder mit anderen Entwicklern ausgetauscht werden können. Dies könnte beispielsweise ein
Code zur Darstellung von Terrain oder etwas Vergleichbares sein. Es gibt viel Literatur zu XNA.
Auf der Seite der ACM Bibliothek10 gibt es mehrere Artikel und es existieren auch mehrere
Bücher. Hier hat XNA gegenüber den anderen Engines eine deutlich bessere Bewertung
erhalten. Die Dokumentation deckt innerhalb der Microsoft Developer Library11 alles ab. Als
10
11
http://portal.acm.org/portal.cfm
http://msdn.microsoft.com/en-us/library/default.aspx
31
3 Evaluierung der Game Engines
Programmiersprache unterstützt XNA ausschließlich C#. XNA kann lediglich auf Windows
Plattformen verwendet werden und beherrscht ausschließlich die Schnittstelle Direct3D. Der
ermittelte Nutzwert und die einzelnen Bewertungen sind in Tabelle 3.4 dargestellt.
Microsoft XNA
Kriterium
Erreichungsgrad
Nutzwert
1
3.5
49
2
3
36
3
4
36
4
3
21
5
2.5
25
6
4
32
7
2
12
8
2.5
30
9
4
40
10
4
48
Gesamt
329
Tab. 3.4: Ergebnisse der Nutzwertanalyse: Nutzwert Microsoft XNA
Irrlicht belegt gemessen am Nutzwert den zweiten Platz. Irrlicht ähnelt OGRE in vielerlei Hinsicht. Bei der Größe, dem Support und der Qualität der Community, den unterstützten Tools,
den Programmiersprachen, dem Umfang, den unterstützten Plattformen und Schnittstellen und
bei der Komplexität und Lernkurve schneidet Irrlicht mit dem bestmöglichen Erreichungsgrad
ab. Die Community um Irrlicht gliedert sich in mehrere verschiedensprachige Gemeinschaften,
unter anderem Deutsch und Französisch. Allein die englischsprachige Community hat ca.
11300 registrierte Mitglieder. Sie ist sehr aktiv und entwickelt stetig Erweiterungen sowie
Verbesserungen für die Engine. Man erhält schnell Antworten auf gestellte Fragen. Es werden
sämtliche Formate unterstützt, wie etwa für Maya, 3dsmax, COLLADA, Milkshape und
weitere. Irrlicht ist in C++ geschrieben, jedoch existieren mehrere Anbindungen für Sprachen
wie Java, .NET und Delphi. Es gibt einen Leveleditor sowie ein Soundsystem und Anbindungen
für die gängigsten Physikbibliotheken. Irrlicht beherrscht Direct3D, OpenGL und verfügt über
einen eigenen Software Renderer. Vor allem Lernkurve und Komplexität sind sehr niedrig. Der
ermittelte Nutzwert und die einzelnen Bewertungen sind in Tabelle 3.5 dargestellt.
32
3 Evaluierung der Game Engines
Irrlicht
Kriterium
Erreichungsgrad
Nutzwert
1
4
56
2
3.5
42
3
4
36
4
4
28
5
4
40
6
3.5
28
7
4
24
8
4
48
9
2.5
25
10
3.5
42
Gesamt
369
Tab. 3.5: Ergebnisse der Nutzwertanalyse: Nutzwert Irrlicht
Den besten Nutzwert erreicht OGRE. Hier liegen die Stärken der Engine vor allem in der
Community, den unterstützten Tools, den Programmiersprachen, dem Aufbau und der Struktur,
den unterstützten Plattformen und Schnittstellen sowie der Dokumentation. Die Community
umfasst ca. 20000 Mitglieder, davon einige Kernmitglieder, welche dauerhaft weiterentwickeln
und sehr aktiv im Forum sind. Die Community hat bereits viele zusätzliche Programme für
OGRE geschaffen. Bei Fragen erhält man innerhalb kürzester Zeit Antworten. Auch hier werden
alle gängigen Werkzeuge unterstützt. Bei den Programmiersprachen ist die Hauptsprache
C++, darüber hinaus existieren aber verschiedene Anbindungen, beispielsweise für Java, C#
und Python. Somit ist es möglich, OGRE auch mit anderen Sprachen zu verwenden. Daher
erhält OGRE auch hier die bestmögliche Bewertung. Der Aufbau von OGRE ist sehr modular
und flexibel, es lassen sich verschiedene Methoden zur Darstellung von Terrain sehr einfach
austauschen, man kann auf einfache Weise ein Physiksystem hinzufügen und es existiert
eine große Anzahl an Frameworks, welche die Entwicklung mit OGRE erleichtern. OGRE
verfolgt einen sehr objektorientierten Ansatz, beispielsweise durch die starke Verwendung
von Entwurfsmustern. Die Dokumentation von OGRE ist sehr gut, es werden Beispiele bei
der Installation mitgeliefert und das Wiki verfügt über sehr gute Einführungen und Artikel
für die Weiterbildung. Darüber hinaus gibt es eine Schnittstellendokumentation sowie ein
Benutzerhandbuch. Es gibt sogar ein Glossar für die gängigsten Begriffe der Computer Grafik.
Der ermittelte Nutzwert und die einzelnen Bewertungen sind in Tabelle 3.6 dargestellt.
33
3 Evaluierung der Game Engines
OGRE
Kriterium
Erreichungsgrad
Nutzwert
1
4
56
2
3.5
42
3
4
36
4
4
28
5
3.5
35
6
4
32
7
4
24
8
3.5
42
9
3
30
10
4
48
Gesamt
373
Tab. 3.6: Ergebnisse der Nutzwertanalyse: Nutzwert OGRE
Viele andere Engines scheitern an der Dokumentation, der Lernkurve und Komplexität, den
vorhandenen Beispielen und der Community. Das sind mitunter die wichtigsten Punkte
einer Engine. Oft liegt dies daran, dass die Engines sich noch in einem frühen Stadium der
Entwicklung befinden. OGRE wird im Gegensatz dazu seit 10 Jahren entwickelt. Daher sollten
diese noch recht jungen Engines in Zukunft nicht einfach außer Acht gelassen werden.
3.4 Auswahl der zu verwendenden Engine
Die Engine, die letztendlich Verwendung finden soll, wird durch ein praktisches Ausspielen der
Engines gegeneinander ausfindig gemacht. Dabei wird für jede der drei besten Engines eine
kleine Anwendung geschrieben, um die Engines genauer zu testen und durch die praktische
Entwicklung herauszufinden, welche Engine letztendlich am besten geeignet ist.
Im Direktvergleich schneidet XNA am schlechtesten ab. Bei XNA fällt vor allem auf, dass viele
Beispielprojekte meist über einen sehr großen Umfang verfügen. Kleinere Beispiele würden eine
schnellere und bessere Einsicht in ein Problem oder einen Lösungsansatz geben. Beim Studium
von größeren Beispielen fehlen oft Zusammenhänge innerhalb der Anwendung, der Code
kann nicht so einfach verstanden werden und benötigt somit eine längere Einarbeitungszeit.
Bei XNA werden außerdem keinerlei Beispielprojekte mitgeliefert. Zudem setzt XNA von
34
3 Evaluierung der Game Engines
Beginn an auf die Verwendung von Shadern. Zwar gibt es dafür eine Standardvorlage, jedoch
lässt sich mit dieser nur ein recht kleines Spektrum an Effekten und Beleuchtung abdecken.
Allgemein ist die Lernkurve und die Komplexität höher als bei den anderen Engines, vor allem,
da man von Beginn an die Programmierung von Shadern beherrschen muss. Somit muss
man auch zwingend über eine shaderfähige Grafikkarte verfügen, um mit XNA entwickeln zu
können. Weiterhin kann XNA nur auf Windows Plattformen mit der Schnittstelle Direct3D
verwendet werden und unterstützt lediglich die Programmiersprache C#.
Irrlicht schneidet sehr gut beim Direktvergleich ab. Vor allem der positive Eindruck von
Erlernbarkeit und niedriger Komplexität verstärkt sich beim praktischen Testen. Auch die
verfügbaren Beispiele und die Gemeinschaft um die Engine weisen eine hohe Qualität auf.
Die Recherchen in der Dokumentation und dem Wiki zeigen allerdings einige Mängel. Zum
Zeitpunkt der Verfassung dieser Arbeit befindet sich das Irrlicht Wiki in einer Umstrukturierung, wodurch kein brauchbares Einstiegstutorial verfügbar ist. OGRE hinterlässt in den
genannten Punkten im Direktvergleich durchweg einen besseren Eindruck. Daher fällt die
Wahl letztendlich doch auf OGRE.
3.5 Demonstration und Ansätze für die Lehre
Um die letztendlich gewählte Engine zu testen, zu demonstrieren und einen guten Lösungsansatz zu ermöglichen, wurde ein Konzept für ein Spiel entwickelt. Dieses enthält die
grundlegenden Anforderungen, über die das Spiel verfügen muss. Das Spielprinzip gestaltet
sich hierbei recht simpel: Der Spieler steuert ein geometrisches Objekt über eine Strecke
und muss dabei versuchen, Hindernissen sowie gegnerischen Objekten auszuweichen. Beim
Zusammenprall verliert der Spieler an Energie. Wenn er bestimmte Objekte aufsammelt,
gewinnt er an Punkten und Fähigkeiten. Das Spiel ist darauf ausgelegt, die Fähigkeiten der
verwendeten Engine zu demonstrieren und Ansatzpunkte für die Lehre der Computer Grafik
zu geben. Ganovelli und Corsini (2009) zeigen einen Ansatz für die Lehre von Computer
Grafik mit Hilfe eines Rennspiels für mehrere Spieler. Das Rennspiel ist ein Framework, dessen
Rendering Methode von den Studenten eigens implementiert werden muss. Dadurch ergeben
sich unterschiedliche Lösungsansätze, die dann unter den Studenten verglichen werden können.
Durch die Entwicklung mit Hilfe des Frameworks sollen die Studenten mit grundsätzlichen
und fortgeschrittenen Themen der Computer Grafik vertraut gemacht werden. Zu den grund-
35
3 Evaluierung der Game Engines
sätzlichen Themen gehören dabei geometrische Transformationen sowie Beleuchtung und
Texturen. Geometrische Transformationen erlernen die Studenten dabei durch die Positionierung von Szenenobjekten, durch Kamerabewegungen oder durch Anwendung von Matrizen
zur Rotation der Autoreifen. Bei der Beleuchtung wird das Phong Beleuchtungsmodell mit
einem ambienten Licht und einem Richtungslicht verwendet. Zusätzlich können die Studenten
am Rand der Straße beispielsweise Lampen platzieren. Um den Umgang mit Texturen zu
lernen, können die Studenten die Autos, das Terrain, die Gebäude und die Straße selbst
texturieren. Um eine ausreichende Punktzahl in der Bewertung zu bekommen, muss man dabei
die grundsätzlichen Themen implementieren. Zu den fortgeschrittenen Themen zählen unter
anderem Shadow Mapping, Partikel Systeme und Skyboxes. Das Framework wurde testweise
in verschiedenen Universitäten verwendet. Dabei konnten die Studenten zwischen anderen
Projekten und dem Framework des Rennspiels wählen. 28 von 30 Studenten entschieden
sich dabei für das Framework des Rennspiels. Die meisten Studenten bezeichneten es als ein
hilfreiches Lernwerkzeug.12
Wie lassen sich die Lehransätze nun in die eigene Anwendung integrieren? Hierfür wurden
folgende Ideen gesammelt:
• Der Spieler soll über eine Matrixmanipulation das Spielerobjekt bewegen bzw. skalieren
können
• Das Spiel wird in Levels aufgeteilt. In jedem Level wird ein anderes Thema der Computer Grafik behandelt. Je weiter der Spieler fortschreitet, desto mehr Aspekte der
Computer Grafik werden berücksichtigt. Behandelt man im ersten Level ausschließlich
grundlegende Themen der Computer Grafik, so werden im letzten Level fortgeschrittene
Themengebiete wie beispielsweise Shader abgedeckt
• Über sogenannte Informationsbildschirme und Informationstexte werden Informationen
zum aktuellen Level eingeblendet
• Die Objekte im Spiel können vom Spieler selbst texturiert werden
• Über ein Quiz am Ende eines Levels muss der Spieler sein angeeignetes Wissen beweisen,
indem er eine Fragestellung korrekt beantwortet
• Der Code an sich lässt sich selbstverständlich auch für die Lehre verwenden. Durch
Änderungen am Code ist es möglich, anhand der daraus resultierenden Auswirkungen
12
Vgl. Ganovelli und Corsini (2009)
36
3 Evaluierung der Game Engines
zu lernen
• Über das Materialsystem der Engine können Materialien ohne neues Kompilieren
verändert und die Resultate begutachtet und verstanden werden
Laut Clua u. a. (2006) verbessert sich der Lernprozess aus Gründen der Motivation und aufgrund der Hochwertigkeit der Ergebnisse, die mit relativ wenig Aufwand hervorgerufen werden
können, wenn ein interaktiver, spielerischer Ansatz verwendet wird. Einen ähnlichen Ansatz
verfolgt Taxén (2003), der den Lernprozess darüber hinaus mit Hilfe einer konstruktivistischen
Didaktik unterstützt. Auf die konstruktivistische Didaktik soll hier nicht näher eingegangen
werden. Taxén (2003) lässt die Teilnehmer dabei im praktischen Teil seines Kurses Texturen
auf ein dreidimensionales Modell abbilden. Zusätzlich sollen die Teilnehmer ein Modell doppelt
so schnell rotieren lassen und eine Kamera und verschiedene Lichtquellen an unterschiedliche
Positionen verschieben sowie deren Eigenschaften ändern.13
3.6 Erstellung und Auswertung des Fragebogens
Um die Tauglichkeit der Anwendung zu evaluieren, wird ein Fragebogen mit Hilfe von Open
Office und Microsoft Word entwickelt und an die betreuenden Professoren sowie an die
Studenten des derzeitigen und des ehemaligen Semesters der Computer Grafik mitsamt der
Anwendung geschickt.
Der Fragebogen geht dabei auf allgemeine Fehler ein, die beim Start oder während des
Spielablaufs auftreten können. Es werden Fragen zum Spielspaß, zur Schwierigkeit des Spiels
und zur Spielidee gestellt. Außerdem enthält der Fragebogen Fragen zur Bedienung und zum
Spielziel. Dabei wird hinterfragt, ob das Spielziel ersichtlich ist oder nicht. Abgesehen von
diesen allgemeinen Fragen wird auch explizit auf die Computer Grafik eingegangen, etwa ob
man es für sinnvoll hält, die Theorie spielerisch erlernbar zu machen oder ob die Anwendung
überhaupt hilft. Weiterhin können auch Ideen für die Ansätze der Lehre und allgemeine
Verbesserungsvorschläge beziehungsweise Anregungen eingetragen werden.
13
Vgl. Taxén (2003), S. 3
37
3 Evaluierung der Game Engines
Leider wurden nur vier Fragebögen zurückgesandt. Zwei Personen haben aufgrund der
Fehler beim Spielstart den Fragebogen nicht ausgefüllt, obwohl sich in einer mitgesandten
Installationsanleitung eindeutige Anweisungen zur Fehlerbehebung befanden. Die Auswertung
der Fragebögen zeigt, dass mehr als die Hälfte der Personen Probleme beim Start des Spiels
haben, ausgelöst durch eine veraltete Version von DirectX. Dreiviertel der Befragten macht das
Spiel Spaß und auch die Spielidee gefällt. Wobei es hinsichtlich der Spielidee Anregungen gibt,
sie insgesamt noch spannender zu gestalten. Drei von vier Befragten finden es auch sinnvoll,
die Computer Grafik spielerisch erlernbar zu machen. Alle Testpersonen geben an, dass sich das
Spiel gut bedienen und auch steuern lässt. Dabei ist das Spielziel nicht durchweg ersichtlich,
auch den Ansatz mit der Matrixmanipulation haben nicht alle verstanden. Darüber hinaus gibt
es noch einige Fehler im Spielablauf. Manchmal können bestimmte Objekte nicht eingesammelt
werden und das Spiel muss neu gestartet werden, um freigeschaltete Levels auswählen zu
können. Weiterhin lassen sich manchmal Menüs der grafischen Benutzeroberfläche nicht
öffnen. Nur zwei Personen haben Angaben zur Schwierigkeit des Spiels gemacht, dabei war es
einmal zu leicht und einmal zu schwer. Alle Testpersonen sind sich einig, dass die Interaktion
im Spiel noch gesteigert werden sollte, es sollte also noch mehr Möglichkeiten geben, die
Theorie interaktiv zu erlernen. Insgesamt sind die Befragten einer Meinung, dass es dem
Spiel derzeit noch an Abwechslung mangelt und mehr interaktive Aufgaben integriert werden
sollten. Die Mehrheit der Testpersonen lernt derzeit noch nichts durch die Anwendung, was
aber auch vor allem an der kurzen Testzeit liegen könnte - man merkt den Fragebögen an,
dass sie hektisch ausgefüllt wurden und dass die dazugehörige Anwendung nicht ausreichend
getestet wurde. Manche Testpersonen merkten nicht einmal, dass das Spiel über mehrere
Levels verfügt. Zu den Problembereichen der Computer Grafik zählt laut einer Testperson
der Bereich der Mathematik. Diesem Bereich sollte demnach noch mehr Aufmerksamkeit
in der Anwendung gewidmet werden. Die Befragten fühlen sich manchmal auch durch das
hektische Spielprinzip überfordert. Hier gilt es also nachträglich nochmals zu prüfen, ob sich
das Spielprinzip in der gegenwärtigen Form überhaupt für die Lehre eignet.
Insgesamt lässt sich aus den Ergebnissen schließen, dass die Anwendung bisher noch keine
sinnvolle Anwendung für die Lehre darstellt. In vielen Bereichen fehlt noch der Feinschliff.
Das Spiel ist noch zu schwer und der Spielablauf zu hektisch. Auch an der spielerischen
Interaktion zum Erlernen der Theorie mangelt es noch. Der überwiegende Teil der Befragten
hält es aber für sinnvoll, Computer Grafik praktisch und spielerisch erlernbar zu machen.
Clua u. a. (2006) und Ganovelli und Corsini (2009) haben zuvor bereits gezeigt, welche
38
3 Evaluierung der Game Engines
positiven Auswirkungen spielerisches und interaktives Lernen haben kann. Die Ergebnisse
der Auswertung sind allerdings kritisch zu betrachten, da von den Testpersonen offenbar
nicht ausreichend getestet wurde und zu wenige Personen den Fragebogen ausgefüllt haben.
Weiterhin fehlte in diesem Fall auch die unterstützende Didaktik des Lehrers. Wird die
Anwendung unter Anweisungen des Lehrers verwendet, ergibt sich möglicherweise ein anderes
Ergebnis.
Der Fragebogen befindet sich im Anhang im Abschnitt A.4 auf Seite 106.
39
4 OGRE
Dieses Kapitel behandelt die im vorigen Kapitel durch die Nutzwertanalyse bestimmte Engine
im Detail: Es wird eine allgemeine Einführung gegeben, anschließend erfährt man genaueres
über die Entwickler, die hinter OGRE stehen. Weiterhin werden Struktur und Aufbau der
Engine erläutert und in diesem Zusammenhang die Philosophie des Designs erklärt. Im letzten
Teil wird auf einige wichtige Erweiterungen eingegangen, die OGRE erst zu einer Game Engine
im eigentlichen Sinne erweitern.
4.1 Engine Einführung
OGRE ist eine Abkürzung und steht für „Object Oriented Rendering Engine“. Hieraus ist bereits
erkennbar, dass die Engine großen Wert auf Objektorientierung legt. Mit Hilfe von OGRE ist
es möglich, 3D-Echtzeitanwendungen zu entwickeln. OGRE ist im Kern keine vollständige
Game Engine, kann aber aufgrund der flexiblen und modularen Architektur ohne weiteres zu
einer Game Engine erweitert werden. Es existieren zahlreiche zusätzliche Bibliotheken wie
beispielsweise CEGUI oder OIS, die bei der Erstellung von grafischen Benutzeroberflächen
und dem Abfangen von Benutzereingaben helfen. Weiterhin gibt es sogenannte „Wrapper “,
die es zum Beispiel ermöglichen, eine Physikengine wie die Open Dynamics Engine (ODE) zu
verwenden.
OGRE bietet gleichwertige Unterstützung für OpenGL und Direct3D und läuft auf Windows,
Linux und Mac OS X. OGRE bietet unter anderem Funktionen wie zum Beispiel Unterstützung
für verschiedene Shading Sprachen, ein Materialsystem, verschiedene Schattentechniken und
Texturformate wie PNG, TGA, JPG und vieles mehr.1 Das SDK ist unter der Lesser GNU
Public License2 lizenziert. Das bedeutet zum einen, dass OGRE selbst kostenlos ist und zum
anderen, dass damit erstellte Anwendungen frei vertrieben werden können.
1
2
Vgl. Junker (2006), S. 4 f.
http://www.gnu.de/documents/lgpl.en.html
40
4 OGRE
Der Gründer von OGRE, Steve Streeting, beschreibt die Philosophie von OGRE folgendermaßen:
„Many other engines whilst technically impressive lack the cohesive design and the consistent
documentation to allow them to be used effectively. Many of them have long features lists,
but have the feel of a bunch of tech demos lashed together with twine, with no clear vision
to hold them together. Like any other software system this becomes their downfall as they
become larger. Most other engines are also designed for one particular style of game or demo
(e. g. first-person shooters, terrain roamers).
OGRE is different. OGRE is design-led rather than feature-led. Every feature that goes into
OGRE is considered thoroughly and slotted into the overall design as elegantly as possible
and is always fully documented, meaning that the features which are there always feel part
of a cohesive whole. Quality is favoured over quantity, because quantity can come later quality can never be added in retrospect. OGRE uses sound design principles learned, tried
and tested many times in commercial-grade software - the object-orientation mentioned in
its moniker is just on of those approaches - frequent use of design patterns is another.“3
In kurzen Worten zusammengefasst liegt der Fokus der Engine auf dem Design und nicht
auf der Masse von Bestandteilen. Alle Bestandteile werden so elegant wie möglich in das
Gesamtkonzept integriert, das Augenmerk richtet sich also auf Qualität und nicht auf Quantität.
Entwurfsmuster und objektorientierte Programmierung sind ein Aspekt der Philosophie von
OGRE. Damit schlägt diese Engine einen zukunftsgerichteten Weg ein.
OGRE wurde von Steve Streeting Ende des Jahres 2000 ins Leben gerufen und war von
Anfang an als gut konzipierte, szenenstrukturierte und unabhängige Engine geplant. Steve
Streeting konnte zuvor auf eine zehnjährige Karriere als professioneller Softwareentwickler
zurückblicken und hat an einer Reihe von Projekten mitgearbeitet, unter anderem auch im
Bereich des grafischen Renderings.4 Derzeit wird OGRE von einem Kernteam entwickelt, das
zum Zeitpunkt dieser Thesis aus sechs Mitgliedern besteht.5
3
Junker (2006), S. 6
Vgl. Junker (2006), S. xvii
5
Vgl. OGRE (2009e)
4
41
4 OGRE
4.2 Struktur und Aufbau von OGRE
OGRE ist in mehrere Teilsysteme unterteilt, die im Folgenden näher beschrieben werden.
4.2.1 Root Objekt
Das Root Objekt ist der Hauptzugangspunkt einer OGRE Anwendung. Über dieses Objekt
wird der Zugang zu jedem Teilsystem innerhalb einer OGRE Anwendung ermöglicht. Die
Instanziierung des Root Objektes startet OGRE und die Zerstörung des Objektes beendet
OGRE ordnungsgemäß.6 Über das Root Objekt erhält man zum Beispiel Zugriff auf den
Szenenmanager und das Render Fenster.
4.2.2 Szenenmanager und Szenengraph
Dass OGRE szenengraphbasiert ist, wurde zuvor bereits erwähnt. Das Szenengraphkonzept ist
Teil eines größeren Konzepts in OGRE, das als Szenenmanager bekannt ist. Alle Implementierungen eines Szenengraphen werden von der Klasse des Szenenmanagers abgeleitet. Dabei
werden sogenannte „Scene Nodes“ an den Szenenmanager angehängt. Diese Scene Nodes
sind jene Objekte, die später in der Szene bewegt werden können. An diese Scene Nodes
können weitere Kindobjekte angehängt und anschließend bewegt, rotiert und skaliert werden.
Sie können auch unabhängig vom Szenengraph existieren. Wenn man vermeiden möchte, dass
die Objekte dargestellt werden, koppelt man sie schlichtweg vom Szenengraph ab. Die meisten
Objekte werden als Instanzen von Entity an den Szenengraph angehängt, die ebenfalls vom
Szenenamanager erstellt werden.7 Entity Objekte enthalten die Rendering Eigenschaften,
auch bekannt als Materialien.8 Diese Entity Objekte vergügen unter Umständen über weitere
Subentitys. Ein Beispiel wäre hier das Modell des OGRE Kopfes. Es enthält Angaben zu
den Texturen sowie weitere Subentitys wie etwa Zähne und Augen, die wiederum einzeln
angesprochen werden können.
6
Vgl. Junker (2006), S. 46
Vgl. Junker (2006), S. 48
8
Vgl. Junker (2006), S. 39
7
42
4 OGRE
Abb. 4.1: OGRE: Der Szenengraph (Vgl. Junker (2006), S. 39)
Ein Szenengraph ist typischerweise für schnelle Suchen und Abfragen optimiert. Er ermöglicht
dem Benutzer, bestimmte Elemente in der Nähe von anderen Elementen zu finden. Es wird
außerdem ermöglicht, Polygone zu finden, zu sortieren und auszusortieren (engl. culling),
um eine effizientere Darstellung erhalten zu können. Mitunter wird der Szenengraph auch
für Kollisionserkennung oder für Teilsysteme wie Audio und Physik verwendet. Anders als
die meisten Implementierungen, baut OGRE auf eine austauschbare Architektur für den
Szenengraph. Dies ermöglicht im Gegensatz zu vielen anderen Szenengraphimplementierungen
somit also die Verwendung von anderen Datentypen wie Physik oder Audio.9
Das Design von OGRE ermöglicht es auch, mehrere Szenenmanager gleichzeitig zu verwenden.
9
Vgl. Junker (2006), S. 77
43
4 OGRE
Je nach Art der Ausrichtung und dem Zweck der Anwendung wird davon profitiert. Für
viele ist diese Herangehensweise die Lösung für die „Portalling“-Problematik. „Portal“ ist
die läufige Bezeichnung für die Grenze zwischen einer Optimierungs- bzw. Komplexitätsmanagementstrategie und einer anderen Strategie, wie zum Beispiel der Betrachtung einer
Landschaft aus dem Fenster eines Innenlevels. Dies ist nicht einfach, weil die Szenenmanager
oft speziell für die Darstellung von Innen- oder Außenarealen optimiert sind. Daher bietet
OGRE verschiedene Typen von Szenenmanagern an.10
4.2.3 Ressourcenmanagement
Alles was von OGRE benötigt wird, um eine Szene darzustellen, wird als Ressource (engl.
resource) bezeichnet. Und alle Ressourcen werden von einem einzigen Objekt verwaltet, dem
ResourceGroupManager. Dieses Objekt ist für die Positionsbestimmung und Initialisierung
der Ressourcen zuständig, die unter den angegebenen Suchpfaden gefunden werden. Dazu
gehören unter anderem Meshs, Materialien, Fonts, Texturen und andere Ressourcen.11
4.2.4 Render Systeme und Render Targets
Das Render System ist eine Verallgemeinerung zwischen OGRE und der darunter liegenden
Programmierschnittstelle der Hardware für OpenGL bzw. Direct3D. Für gewöhnlich interagiert
man nicht direkt mit dem Render System. Stattdessen interagiert man mit einem Objekt, das
vom Render System erstellt wird und als Render Target bezeichnet wird. Render Target ist
eine Verallgemeinerung von zwei wichtigen Objekten in OGRE: Das Render Fenster und die
Render Texture. Das Render Fenster ist das Hauptfenster einer Anwendung, es lassen sich
auch mehrere Render Fenster in einem erstellen. Es kann hierbei automatisch oder manuell
über das Root Objekt oder über das Render System erstellt werden. Eine manuelle Erstellung
erlaubt mehr Einstellungsmöglichkeiten des Fensters, wie beispielsweise die Auflösung und
den Namen.12 Mit der Render Texture können Teile der Szene oder die gesamte Szene auf
einer Textur dargestellt werden.13
10
Vgl.
Vgl.
12
Vgl.
13
Vgl.
11
Junker
Junker
Junker
Junker
(2006),
(2006),
(2006),
(2006),
S.
S.
S.
S.
78 f.
46 ff.
48
161
44
4 OGRE
4.2.5 OGRE Manager
Ein Manager in OGRE ist eine Klasse, die den Zugang zu oder die Lebensdauer von anderen
verwandten Objekttypen verwaltet. Hier sollen auszugsweise einige Beispiele für Manager
genannt und erläutert werden:
• Der Materialmanager verwaltet alle Materialinstanzen in der Anwendung und erlaubt
die Wiederverwendung von Materialobjekten mit demselben Namen
• Der Texturmanager verwaltet die Lebensdauer von und den Zugang zu allen Texturen,
die innerhalb der Anwendung referenziert, geladen oder verwendet werden
• Der Plattformmanager ermöglicht einen abstrakten Zugriff auf alle Details der unterliegenden Hardware und dem Betriebssystem, wie beispielsweise Timer und fensterspezifische Dinge wie etwa den OGRE Konfigurationsdialog beim Start einer Anwendung
• Der Archivmanager ermöglicht den Zugriff auf Ressourcen wie Ordner im Dateisystem
oder komprimierte Dateien wie etwa ZIP
Es existieren weitere Manager, unter anderem für Meshs, Fonts, Overlays, Skeletons, Partikel
und Logging.14
14
Vgl. Junker (2006), S. 49 ff.
45
4 OGRE
Abb. 4.2: OGRE: High Level Klassendiagramm von Root Objekt und Managern (Vgl. OGRE
(2009b))
4.3 Erweiterungen für OGRE
Wie zuvor bereits erwähnt, handelt es sich bei OGRE nicht um eine Game Engine, sondern um
eine reine Rendering Engine. An dieser Stelle sollen beispielhaft einige wichtige und sinnvolle
Erweiterungen für OGRE vorgestellt werden, die die fehlenden Komponenten ersetzen oder
OGRE auf andere Art und Weise sinnvoll bereichern können.
OIS
OIS steht für „Object Oriented Input System“, und stellt ein objektorientiertes Eingabesystem
dar. Es handelt sich hierbei um eine plattformunabhängige Open-Source-Bibliothek, mit der
Tastaturen, Mäuse und Joysticks angesteuert werden können. Mit OIS können Eingaben in
OGRE abgefangen werden.15
CEGUI
CEGUI steht für „Crazy Eddie’s GUI System“ und ist eine plattformunabhängige freie Bibliothek, die Fenster und Widgets bereitstellt. Mit der Bibliothek lassen sich grafische Benutzer15
Vgl. OGRE (2009d)
46
4 OGRE
oberflächen entwickeln. CEGUI wird oftmals in OGRE Anwendungen eingesetzt, kann jedoch
auch in anderen Projekten verwendet werden.16
OgreODE
OgreODE ist ein Wrapper für die bekannte Physikbibliothek ODE (Open Dynamics Engine).
ODE beherrscht die Simulation starrer Körper. Die Bibliothek enthält auch ein Kollisionserkennungssystem.17
NxOgre
NxOgre ist ein Wrapper für die bekannte Physikbibliothek PhysX18 . Ursprünglich wurde
PhysX von Ageia entwickelt.19
OgreNewt
Hierbei handelt es sich um einen Wrapper für eine weitere Physikbibliothek namens Newton
Game Dynamics20 , die kostenlos für nichtkommerzielle Zwecke eingesetzt werden kann.21
COLLADA
COLLADA stellt ein wichtiges Unterfangen der gesamten 3D-Grafikindustrie dar. Es handelt
sich hierbei um ein gemeinsames Format, das alle Programme zur Inhalteerstellung wie etwa
3dsmax oder Blender verstehen können. Das COLLADA Format basiert auf XML. Es existiert
ein Plugin für OGRE, welches in der Lage ist, dieses Format zu verwenden.22
OgreAL
OgreAL ist ein Wrapper für OpenAL, wodurch sich Musik und 3D-Audioeffekte in OGRE
Anwendungen integrieren lassen. OpenAL ist eine plattformunabhängige 3D-Audio-API, die
von Creative entwickelt wurde und unter anderem für Spiele oder andere Anwendungen
verwendet werden kann. Es ist eine statusbasierte API, die einem Muster folgt, welches dem
von OpenGL ähnelt.23
16
Vgl. OGRE (2009a)
Vgl. Open Dynamics Engine (2009)
18
Vgl. NxOgre (2009)
19
Vgl. Junker (2006), S. 252
20
http://newtondynamics.com/
21
Vgl. Junker (2006), S. 252
22
Vgl. Junker (2006), S. 251
23
Vgl. OGRE (2009c)
17
47
4 OGRE
Ogitor
Ogitor ist ein pluginbasierter WYSIWYG 24 Editor für OGRE. Mit diesem ist die einfache
Erstellung von Szenen möglich, die anschließend mit OGRE geladen werden können. Durch das
von OGRE inspirierte Plugin-Konzept ist es möglich, eigens für OGRE entwickelte Bibliotheken
direkt in Ogitor zu verwenden. Dabei wird ein XML Format namens „.ogscene“ verwendet.
Es ist allerdings auch möglich, eigene Plugins für den Export bzw. Import zu verwenden.25
24
25
Abk. für „What you see is what you get“
Vgl. Ogitor (2009)
48
5 Konzeption
In diesem Kapitel wird die Konzeption der Anwendung beschrieben. Es wird auf die Erhebung
der Anforderungen und deren Definitionen eingegangen. Ausgehend von den Anforderungen
wird eine Architektur für die Anwendung entwickelt, die im Verlauf des Kapitels näher
beschrieben wird.
5.1 Spielkonzept
5.1.1 Grundlagen der Spielemechanik
Um ein Spiel für die Lehre zu entwickeln, wird zunächst mit der Konzeption des Spiels
begonnen. Hierbei wird im ersten Schritt das Genre des Spiels festgelegt. Da das Spiel zum
Zwecke der Lehre eingesetzt werden soll, werden Genres wie Shooter oder Strategiespiele
außen vor gelassen und als Genre das Feld der Geschicklichkeit gewählt. Im weiteren Schritt
wird eine Spielidee erdacht. Der Spieler soll dabei eine Spielfigur über eine festgelegte Strecke
steuern und Hindernissen sowie anderen gegnerischen Objekten ausweichen. Hierfür müssen
zunächst die konkreten Spielelemente- und regeln festgelegt werden. Schell (2008) beschreibt
diese folgendermaßen:
„Game mechanics are the core of what a game truly is. They are the interactions
and relationships that remain when all of the aesthetics, technology, and story
are stripped away.“ 1
Hier gibt es laut Schell (2008) verschiedene Aspekte der Spielemechanik, die im Folgenden
näher beschrieben werden.
1
Schell (2008), S. 130
49
5 Konzeption
Raum (Space)
Ein Aspekt der Spielemechanik ist der Raum. Dabei muss jedes Spiel in irgendeiner Art von
Raum stattfinden. Über diesen Raum werden die verschiedenen Orte definiert, die innerhalb
eines Spiels existieren und wie sie miteinander zusammenhängen. Beispielsweise nutzt das
Spiel Tic-Tac-Toe ein diskretes, zweidimensionales Spielfeld. Diskret bedeutet hier, dass man
sich mehr um die Grenzen des Spielfelds, als um den Platz darin kümmert.2
Objekte, Eigenschaften und deren Beschaffenheiten (Objects, Attributes, States)
Innerhalb des Spiels und genauer der Spielwelt gibt es Objekte wie beispielsweise Charaktere,
Requisiten, Anzeigetafeln und andere Dinge, die gesehen oder manipuliert werden können.
All diese Dinge gehören in diese Kategorie. Diese Objekte sind sozusagen die „Nomen“ der
Spielemechanik. Sie haben für gewöhnlich eine oder mehrere Eigenschaften, dazu gehört auch
die aktuelle Position in der Spielwelt. Eigenschaften in einem Rennspiel sind beispielsweise die
maximale Geschwindigkeit und die aktuelle Geschwindigkeit eines Autos. Jede Eigenschaft hat
eine aktuelle Beschaffenheit. Die Beschaffenheit der Eigenschaft „maximale Geschwindigkeit“
könnte 150 km/h sein, während die Beschaffenheit der Eigenschaft „aktuelle Geschwindigkeit“
75 km/h sein könnte. Wenn Objekte die Nomen der Spielemechanik sind, sind Eigenschaften
und deren Beschaffenheit die Adjektive. Eigenschaften können dabei statisch, wie beispielsweise
eine Farbe, oder dynamisch sein (Bewegungsmodus mit drei möglichen Beschaffenheiten wie
„normal“, „schnell“ oder „langsam“).3
Aktionen (Actions)
Ein weiteres wichtiges Element ist die Aktion. Aktionen sind laut Schell (2008) die „Verben“
der Spielemechanik. Dabei gibt es zwei Sichtweisen auf Aktionen. Oder anders ausgedrückt,
zwei Wege, die Frage, was ein Spieler machen kann, zu beantworten. Die erste Art von
Aktionen sind die operativen Aktionen. Diese stellen die Basisaktionen dar, die ein Spieler
ausführen kann. In dem Spiel Dame kann ein Spieler beispielsweise einen Spielstein forwärts
bewegen, einen Gegner überspringen oder sich rückwärts bewegen (nur die Dame). Die andere
Art von Aktionen stellen resultierende Aktionen dar. Diese haben nur im Gesamtbild des
Spiels eine Bedeutung. Sie hängen damit zusammen, wie der Spieler die operativen Aktionen
verwendet, um ein Ziel zu erreichen. Ein Beispiel aus Dame: Einen Spielstein beschützen,
2
3
Vgl. Schell (2008), S. 133 ff.
Vgl. Schell (2008), S. 136
50
5 Konzeption
indem man einen anderen Spielstein hinter diesen Stein bewegt. Oder man zwingt einen
Gegner, einen ungewollten Sprung zu machen. Oder man opfert einen Spielstein, um den
Gegner auszutricksen. Diese resultierenden Aktionen sind oftmals nur unterschwellig vorhanden
und sehr strategisch, kennzeichnen aber laut vielen Game Designern ein gutes Spiel. Dies sind
Aktionen, die nicht Teil der Spielregeln an sich sind, sondern Aktionen und Strategien, die
völlig natürlich entstehen, wenn das Spiel gespielt wird.4
Regeln (Rules)
Die Regeln sind die grundlegendsten Elemente eines Spiels. Sie definieren den Raum, die
Objekte, die Aktionen, die Konsequenzen und Grenzen der Aktionen und die Ziele. In anderen
Worten ermöglichen sie all die Spielemechanik, die bis jetzt aufgeführt worden ist.5
Fertigkeit (Skill)
Das Element der Fertigkeit setzt den Fokus vom Spiel auf den Spieler. Jedes Spiel erfordert
von den Spielern, bestimmte Fertigkeiten zu trainieren. Wenn die Schwierigkeit des Spiels
den Fertigkeiten des Spielers entspricht, bleibt der Spieler herausgefordert und motiviert. Die
meisten Spiele erfordern nicht nur eine Fertigkeit von einem Spieler, sondern mehrere. Dabei
kann man die Fertigkeiten in verschiedene Kategorien unterteilen, wie zum Beispiel physische
Fertigkeiten wie etwa Stärke, Ausdauer und Koordination beim Sport. Dazu könnte man auch
die Manipulation eines Spielecontrollers zählen. Weiterhin gibt es mentale Fertigkeiten wie
Gedächtnis, Beobachtung und die Fähigkeit, Puzzles zu lösen. Zur letzten Kategorie gehören
soziale Fertigkeiten wie Täuschung des Gegners und Kommunikation. Poker ist beispielsweise
ein Spiel, das die sozialen Fertigkeiten fordert.6
Zufall (Chance)
Zufall ist ein wichtiger Bestandteil eines guten Spiels, denn Zufall bedeutet Ungewissheit und
Ungewissheit bedeutet Überraschungen.7
4
Vgl.
Vgl.
6
Vgl.
7
Vgl.
5
Schell
Schell
Schell
Schell
(2008),
(2008),
(2008),
(2008),
S.
S.
S.
S.
140 f.
144
151
153 f.
51
5 Konzeption
5.1.2 Übertragung auf das eigene Spielkonzept
Die zuvor genannten Punkte der Spielemechanik werden bei der Konzeption des Spiels berücksichtigt. Der Raum, in dem das Spiel in diesem Fall stattfindet, ist eine dreidimensionale
festgelegte Strecke. Der Spieler kann die Strecke nicht verlassen, sondern sich nur innerhalb
eines bestimmten Bereiches bewegen. Dabei spielen lediglich die x-Achse und die z-Achse eine
Rolle. Der Spieler kann sich weder auf noch ab bewegen. Die Steuerung findet somit auf einer
zweidimensionalen Ebene statt. Innerhalb der Spielwelt gibt es den Charakter des Spielers,
das Spielerobjekt. Außerdem existieren hier statische und sich bewegende Hindernisse, sowie
aufsammelbare Objekte. Diese haben Eigenschaften wie Farbe, Texturen, Geschwindigkeit
(insofern sie sich bewegen), Position und entsprechende Beschaffenheiten. Die Basisaktionen
des Spielers umfassen die Steuerung des Spielerobjektes nach links oder rechts über die
Pfeiltasten und die Manipulation des Spielerobjektes über eine Matrix. Der Spieler kann
dadurch Hindernissen ausweichen. Er bewegt sich während des Spiels automatisch vorwärts.
Darüber hinaus kann der Spieler über bestimmte Tasten Menüs aufrufen und Informationen
über die Levels abrufen.
Einige Regeln wurden zuvor bereits genannt. Der Spieler kann sich nicht selbstständig vorwärts
oder auf und ab bewegen. Das Verlassen des Spielfelds ist ebenfalls nicht möglich. Prallt der
Spieler mit Hindernissen zusammen, so verliert er an Energie. Hat er alle Energie verloren, so
verliert er ein Leben. Sind wiederum alle Leben aufgebraucht, endet das Spiel. Der Spieler hat
dabei die Möglichkeit, über aufsammelbare Objekte seine Fähigkeiten zu beeinflussen, negativ
sowie positiv. Er erkennt dabei anhand der Farbe der Objekte, ob sie positive oder negative
Auswirkungen haben. Die Auswirkungen selbst erkennt der Spieler nicht, was den Aspekt des
Zufalls anspricht. Durch das Sammeln erhält er außerdem Punkte, welche die Motivation
steigern sollen. Die wichtigste Fertigkeit im Spiel ist das Reaktionsvermögen und die Geschicklichkeit des Spielers. Es gilt, den Hindernissen auszuweichen, dabei die Objekte aufzusammeln
und ohne Kollision durch das Level zu kommen. Dabei muss man vorausschauend denken
und einschätzen können, wann eine Aktion zu Verlust von Energie führen könnte. Hierfür
gibt es auch verschiedene Schwierigkeitsgrade, damit die Herausforderung an die Fähigkeiten
des Spielers angepasst werden kann. Außerdem wird der Spieler über mentale Elemente, wie
beispielsweise die Eingabe einer Transformationsmatrix, gefordert. Soziale Fertigkeiten werden
bisher nicht benötigt. Der Zweispielermodus ist in der ersten Variante der Anwendung zwar
angedacht, aber noch nicht integriert.
Weiterhin werden bereits im Voraus Spezifikationen bezüglich der grafischen Darstellung, wie
52
5 Konzeption
zum Beispiel die Verwendung von fortgeschrittenen Effekten wie Bump Mapping und Shadern
festgelegt, sowie eine simple Rahmengeschichte für das Spiel erdacht.
5.2 Anforderungen
Die Anforderungen werden aus dem zuvor beschriebenen Konzept des Spiels unter der Berücksichtigung der Lehre der Computer Grafik erhoben. Hierfür wird ein Pflichtenheft nach Helmut
Balzert angefertigt, welches die Zielbestimmung, den Produkteinsatz, die Produktumgebung,
die Produktfunktionen, die Produktdaten, die Benutzungsoberfläche, Qualitätszielbestimmungen, globale Testszenarien, Anforderungen an die Entwicklungsumgebung und andere
erwähnenswerte Ergänzungen näher beschreibt. Das Pflichtenheft wird separat mit dieser
Arbeit abgegeben.
5.2.1 Zielbestimmung und Einsatz der Anwendung
Die Anwendung, die im Rahmen dieser Thesis entwickelt werden soll, dient als Basis für ein
Programm, das zur Lehre der Computer Grafik eingesetzt werden kann. Darüber hinaus sollen
mit der Anwendung die Fähigkeiten von OGRE aufgezeigt werden. Dabei richtet sich die
Anwendung an zwei Zielgruppen. Zum einen sollen Studenten, die an der Vorlesung Computer
Grafik der Hochschule Reutlingen teilnehmen, die Theorie praktisch und spielerisch erlernen
können. Zum anderen soll es Professoren damit ermöglicht werden, die Lehre zu unterstützen.
Beispielsweise könnte die Anwendung zur Prüfungsvorbereitung oder aktiv in der Vorlesung
verwendet werden. Für den sinnvollen Gebrauch der Anwendung sollten Kenntnisse über das
Gebiet der Computer Grafik bereits vorhanden sein. Das Spiel kann die vollständige Lehre
nicht ersetzen, es benötigt begleitende Didaktik durch einen Lehrer.
Die Anwendung würde dabei auf den privaten Computern beziehungsweise auf den Computern
im Multimediaraum der Hochschule Reutlingen und auf dem Computer des Professors
verwendet werden. Daher lässt sich auch keine tägliche Betriebszeit festlegen, die Anwendung
bedarf auch keiner speziellen Beobachtung. Gewartet werden muss die Anwendung insofern,
dass mit der Zeit neue Funktionen hinzugefügt werden können.
53
5 Konzeption
Musskriterien
Es soll ein Spielerobjekt durch eine vorgegebene Umgebung gesteuert werden. Mit dem
Spielerobjekt sollen Objekte aufgesammelt und Hindernissen ausgewichen werden. Dabei wird
eine Kamera aus Sicht der dritten Person verwendet. Die Spielumgebungen werden hierbei
in Levels eingeteilt. Zusätzlich zu diesen Anforderungen sollen Ansätze integriert werden,
anhand von denen die Theorie der Computer Grafik spielerisch und praktisch beigebracht
werden kann. Außerdem soll alles über eine grafische Benutzeroberfläche bedienbar sein.
Wunschkriterien
Zu den gewünschten Anforderungen zählt die Verwendung einer Nintendo WiiMote zur
Steuerung des Spielerobjektes, die Verwendung einer Kamera aus der ersten Person und eine
Kollisionserkennung, mit der die Kollision zwischen den Objekten festgestellt werden soll.
Weiterhin sollen eigene 3D-Objekte mit Hilfe eines Modellierungswerkzeuges erstellt und im
Spiel verwendet werden. Als weitere Wunschkriterien werden ein Soundsystem zum Abspielen
von Audiodateien, die Führung einer Punkteliste (Highscore), die Verwendung von Animationen, die Verwendung eines Physiksystems für die realistische Darstellung physikalischer
Abläufe und ein Zweispielermodus festgehalten.
Es sei nochmals erwähnt, dass der Fokus der Anwendung auf einer Demonstration der
Fähigkeiten von OGRE und der Lehre von Computer Grafik liegt. Daher wird auch nicht
die Entwicklung eines hochwertigen Spiels angestrebt. Dies bezeichnet man als sogenanntes
Abgrenzungskriterium.
5.2.2 Produktumgebung
Aus der Zielbestimmung und dem Einsatz der Anwendung lassen sich die Anforderungen für
die Produktumgebung ableiten.
Software
Da von den Professoren und den Studenten und auch im Multimediaraum vorwiegend Windows verwendet wird, wird als Hauptbetriebssystem Windows (XP, Vista) angestrebt. Da
aber ein möglichst großer Personenkreis die Anwendung verwenden können soll, werden auch
Nutzer von Linux und Mac OS X berücksichtigt. OGRE kapselt den Zugriff auf die darun-
54
5 Konzeption
terliegende Grafikhardware, daher ist es möglich, die Anwendung auch plattformunabhängig
bereitzustellen.
Hardware
Um die Anwendung verwenden zu können, wird ein Computer mit einer Grafikkarte benötigt.
OGRE stellt keinen Software Renderer zur Verfügung, der die Berechnung auf der CPU
vornehmen würde. Da auch fortgeschrittene Gebiete der Computer Grafik behandelt werden,
sollte eine Grafikkarte der neueren Generation vorhanden sein, die den Umgang mit Shadern vorzugsweise Shader Model 3.0 - beherrscht.
5.2.3 Qualitätszielbestimmungen
Besonderes Augenmerk bei den Qualitätszielbestimmungen - oft auch als nichtfunktionale
Anforderungen bezeichnet - liegt auf der Korrektheit, der Zuverlässigkeit, der Erweiterbarkeit
und der Portierbarkeit der Anwendung. Die Korrekheit beschreibt dabei die Fehlerfreiheit
der Ergebnisse. Angenommen bei der Eingabe der Werte für eine Transformationsmatrix
würden korrekte Werte eingetragen, aber das Ergebnis der Transformation des Objektes wäre
inkorrekt. Dies hätte zur Folge, dass falsche Kenntnisse daraus gezogen würden. Es wird
dabei auch angestrebt, die Anwendung und damit verbunden die Funktionen so zuverlässig
und robust wie möglich umzusetzen. Das bedeutet, dass bei Fehleingaben die Anwendung
weder abstürzt noch durch andere Handlungen seitens des Anwenders infunktional gemacht
werden kann. Es bedeutet, dass die Anwendung auch unter ungünstigen Bedingungen gut
läuft. Ein weiterer wichtiger Punkt ist die Erweiterbarkeit der Anwendung. Mit dieser Arbeit
wird nur die Grundlage einer Anwendung für die Lehre geschaffen. Auch in Zukunft soll es
möglich sein, die Anwendung zu erweitern und sie um neue Ansätze für die Lehre und andere
Funktionen zu ergänzen. Die Portierbarkeit der Anwendung bezieht sich auf die Fähigkeit der
Anwendung, auf verschiedenen Computersystemen lauffähig zu sein.
Weniger Bedeutung wird hierbei der Effizienz der Anwendung zugemessen. Dies umfasst
die Sparsamkeit der Anwendung bezüglich der Ressourcen, was unter anderem durch gute
Algorithmen und einen guten Programmierstil erreicht wird. Dies könnte bei einem Redesign
der Anwendung vermehrt berücksichtigt werden.
55
5 Konzeption
5.2.4 Weitere Teile des Pflichtenheftes
Das Pflichtenheft enthält bereits die grundlegende Dialogstruktur der interaktiven Benutzeroberfläche und eine genauere Beschreibung der Produktfunktionen. Weiterhin enthält es
einige Testszenarien und Testfälle, deren Erfüllung ein Muss für die korrekte Funktionalität der
Anwendung darstellt. Die Speicherung der Produktdaten lässt sich ebenfalls dem Pflichtenheft
entnehmen. Diese umfasst die Konfiguration des Spiels und die Speicherung der Punktzahl
des Spielers in einer Konfigurationsdatei bzw. in einer Datenbank. Diese Abschnitte sind
selbsterklärend und lassen sich dem dieser Arbeit beigefügten Pflichtenheft entnehmen.
5.3 Architektur
Aus den zuvor genannten Anforderungen und der Konzeption des Spiels kann nun die
Architektur der Anwendung abgeleitet werden, die in Abbildung 5.1 zu sehen ist.
Die Anwendung wird nach objektorientierten Maßstäben konzipiert. Dabei wird auf die Verwendung eines Frameworks zurückgegriffen. Die Idee hierfür stammt aus einem Beispielprogramm
aus dem Wiki von OGRE. Das Framework eignet sich perfekt für die Lehre, da einzelne
Programmfunktionen selbstständig ersetzt werden können, ähnlich wie es Ganovelli und Corsini
(2009) gezeigt haben. Darüber hinaus ist durch die objektorientierte Herangehensweise und
das Framework auch die Erweiterbarkeit garantiert, da neue Programmelemente problemlos
hinzugefügt werden können.
Die Klasse OgreApplication stellt hierbei das Framework dar. In dieser Klasse werden alle
OGRE spezifischen Variablen erstellt und initialisiert, die auch in anderen Anwendungen
basierend auf OGRE wiederverwendet werden können. Von dieser erbt die Klasse Game und
übernimmt damit die entsprechenden Methoden und Attribute. Die Klasse Menu verwaltet
alle mit der Benutzeroberfläche zusammenhängenden Elemente, wie beispielsweise die im
Pflichtenheft beschriebene Menüstruktur. Die Klasse Sound initialisiert und verwaltet die
Audiodateien, die im Spiel verwendet werden. GameObject stellt eine abstrakte Klasse dar
und enthält entsprechende Funktionen zum Hinzufügen, Positionieren und Löschen von
Objekten. Von dieser Klasse erben dann die Klassen Player, Object und Enemy. Diese
Klassen spezifizieren wiederum weitere, je nach Klasse benötigte Funktionen. Die Klasse
Level repräsentiert jeweils ein Level des Spiels und ermöglicht das Laden und Entladen der
56
5 Konzeption
Levels. Über die Klasse Game werden die Komponenten zusammengefügt und kommunizieren
miteinander. Die Klasse Game enthält dabei auch die Logik des Spiels und verwaltet Spieler,
sowie Gegner und Hindernisse. Außerdem wird hier die Kollisionserkennung zwischen diesen
Objekten vorgenommen.
Es sei bereits vorab darauf hingewiesen, dass sich diese Architektur im späteren Verlauf nicht
vollständig bewährt hat. Die Unterschiede zwischen der konzipierten und der tatsächlich
umgesetzten Architektur werden im kommenden Kapitel genauer erläutert.
Abb. 5.1: Konzipiertes Klassendiagramm der Architektur
57
6 Implementierung
In diesem Kapitel wird zunächst auf die Grundlagen der Implementierung eingegangen. Im
Anschluss werden Struktur und Aufbau der mit OGRE entwickelten Anwendung genauer
untersucht und erläutert. Dabei wird anhand einiger ausgewählter exemplarischer Codebeispiele
die Funktionsweise der Anwendung demonstriert. Auf die Implementierung der Ansätze für
die Lehre wird gesondert eingegangen. Am Ende des Kapitels werden die Probleme und deren
Lösungen betrachtet, die während der Entwicklung der Anwendung auftraten.
6.1 Grundlagen
Für OGRE existieren diverse Wrapper für Programmiersprachen. Dadurch ist es möglich, OGRE
Anwendungen mit Hilfe von Programmiersprachen wie Java, C# oder Python zu erstellen.1
Für diese Arbeit wurde auf die ursprüngliche Kernsprache von OGRE zurückgegriffen: C++.
Diese Programmiersprache ist am besten dokumentiert und es gibt ausreichend Beispiele. Als
Entwicklungsumgebung wurde Eclipse 3.5.0 „Galileo“ verwendet. Für die Entwicklung von
OGRE können viele verschiedene Entwicklungsumgebungen genutzt werden. Zum Zeitpunkt
der Implementierung war das OGRE SDK in der Version 1.6.3, Codename „Shoggoth“ die
aktuelle Version. Während der Arbeit erschien die Version 1.6.5 „Shoggoth“ von OGRE,
die verschiedene Fehler behebt. Die Entwicklung der Anwendung fand hauptsächlich auf
Linux statt, daher wurde als Schnittstelle vorwiegend OpenGL verwendet. Zum Testen der
Plattformunabhängigkeit und des Quellcodes wurde zusätzlich unter Windows XP mit Hilfe
von Visual Studio 2008 getestet und entwickelt.
1
Vgl. Junker (2006), S. 253 f.
58
6 Implementierung
6.2 Struktur und Aufbau
Die Architektur der finalen Anwendung unterscheidet sich in mancher Hinsicht von der im
Konzept aus Abschnitt 5.3 auf Seite 56 beschriebenen Architektur. Im Konzept wird mit
abstrakten Klassen für das Spielerobjekt, für aufsammelbare Objekte und für die gegnerischen
Objekte gearbeitet. Dies wurde in der finalen Anwendung aus Zeitgründen nicht mehr
umgesetzt. Es war ursprünglich nur eine gemeinsame Klasse Enemy für gegnerische Objekte
sowie Hindernisse angedacht. Während der Umsetzung ergab sich anlässlich einer besseren
Verwaltung der Objekte eine Aufteilung in eine Klasse SceneryObject für Hindernisse und
Elemente des Levels, die statisch sind. Zusätzlich wurden die Klassen AnimatedEnemy für
animierte bewegliche Feinde und SimpleEnemy für nicht animierte bewegliche Feinde angelegt.
Diese Klassen sollten in der konzipierten Architektur von der Klasse Game verwaltet werden.
Während der Umsetzung ergab sich hier allerdings sinnvollerweise eine Auslagerung dieser
Klassen in die Level Klasse, da sie eindeutig feste Bestandteile eines jeden Levels sind.
Weiterhin wurde die Klasse GameOverlay nachträglich eingefügt, um die Elemente des mit
OGRE erstellten Overlay-Systems zu verwalten. Aus dem Konzept nicht ersichtlich, aber
ursprünglich angedacht war, dass die Klasse Level jeweils ein Level des Spiels repräsentiert.
Auch hier wurde aus Zeitgründen anders verfahren. Die Klasse Level enthält nun alle Levels
„hard gecoded“ und verwaltet das Laden und Löschen dieser Levels. Zusätzlich übernimmt sie
die Kollisionserkennung mit den Hindernissen, Gegnern und aufsammelbaren Objekten und
verwaltet diese.
59
6 Implementierung
Abb. 6.1: Finales Klassendiagramm der Architektur der Anwendung
6.2.1 Klassen
Dieser Abschnitt geht kurz auf den allgemeinen Aufbau einer OGRE Anwendung ein. Anschließend werden die implementierten Klassen und ihre Funktionen beschrieben.
In einer grundlegend minimalen OGRE Anwendung, die in einem Fenster läuft und über einen
Konfigurationsdialog eingestellt werden kann, wird zunächst das sogenannte Root Objekt von
OGRE instanziiert. Über dieses Objekt erhält man Zugriff auf das Render Fenster, in der die
Anwendung letztendlich dargestellt wird.
60
6 Implementierung
Algorithmus 6.1 Eine minimale OGRE Anwendung
// Instanziieren des Root Objektes
Root *root = new Root();
// Anzeigen des Konfigurationsdialoges
root->showConfigDialog();
// Initialisierung des Root Objektes
root->initialise(true, “Mein Render Fenster“);
// Erstellen eines Render Fensters mit automatischen Werten
RenderWindow *window = root->getAutoCreatedWindow();
// Starten des Renderns
root->startRendering();
In dieser Anwendung, gezeigt in Algorithmus 6.1, wird allerdings noch nichts dargestellt. Soll
etwas dargestellt werden, so wird ein Szenenmanager, ein Viewport und eine Kamera benötigt.
Den Zugriff auf den Szenenmanager erhält man wiederum über das Root Objekt. Die Kamera
erhält man anschließend über den Szenenmanager und den Viewport über das Render Fenster.
Dies wird in Algorithmus 6.2 dargestellt.
Algorithmus 6.2 Erstellung von Szenenmanager, Camera und Viewport
// Erstellung des Szenenmanagers
SceneManager* sceneManager = root>createSceneManager(ST_GENERIC, “Mein SzenenManager“);
// Erstellung einer Camera
Camera* camera = sceneManager->createCamera(“HauptCamera“);
camera->setAspectRatio(1.33333f);
camera->setFOVy(30.0f)
// Erstellung des Viewports
Viewport* viewPort = window->addViewport(camera);
In Abbildung 6.1 ist das Klassendiagramm der umgesetzten Anwendung abgebildet. Die
abstrakte Klasse OgreApplication ist ein Framework und erbt von der OGRE spezifischen
Klasse FrameListener und den beiden OIS Klassen KeyListener und MouseListener, die für
Benutzereingaben benötigt werden. Ein Framework ist eine teilweise aufgebaute Anwendung.
Der Entwickler ergänzt hierbei die Anwendung, indem er eine eigene Implementierung für
die fehlende Funktionalität innerhalb des Frameworks bereitstellt oder das vorgegebene Verhalten überschreibt.2 Dies wird an dieser Stelle mit virtuellen Funktionen in C++ realisiert.
2
Vgl. Gregory (2009), S. 308
61
6 Implementierung
Diese Funktionen können grundlegend implementiert und in einer abgeleiteten Klasse vervollständigt oder überschrieben werden. Die Klasse OgreApplication kümmert sich um die
Initialisierung des OGRE Root Objektes und der OIS Benutzereingaben. OgreApplication
liest die Ressourcen ein und initialisiert diese, erstellt den FrameListener, den Szenenmanager
und das Render Fenster und wandelt OIS MouseButtons in CEGUI MouseButtons um. Dies
sind grundlegende Tätigkeiten, die häufig in OGRE Anwendungen gemacht werden müssen
und somit wiederverwendet werden können. Aus diesem Grund wurden sie in diese Klasse
ausgelagert. Von dieser Klasse erbt die Klasse Game. Sie initialisiert und verwaltet alle mit
der Spielelogik zusammenhängenden Komponenten, wie etwa die Levels und das Spielerobjekt.
Hier werden auch die Objekte für das Menü, den Sound und das Overlay-System erstellt.
Darüber hinaus wird hier die Kamera erstellt und Benutzereingaben werden mit Hilfe von
OIS abgefangen und verarbeitet. Die Klassen Menu und GameOverlay sind für die grafische
Benutzeroberfläche verantwortlich. Die Klasse Menu regelt die mit CEGUI erstellten interaktiven Elemente der grafischen Benutzeroberfläche. Die Klasse GameOverlay kümmert sich
mit Hilfe des OGRE Overlay-Systems um die nicht interaktiven Elemente, wie zum Beispiel
die Anzeige der Punktzahl, Energie und Leben des Spielers und die aktuelle Position im
Koordinatensystem. Darüber hinaus werden über das Overlay-System Informationen zum
Level, die Levelnamen und bei Kollision mit Objekten eine Schadensanzeige eingeblendet. Die
Klasse Sound initialisiert die Audiobibliothek Audiere3 , mit deren Hilfe Audiodateien abgespielt
werden können. Außerdem verwaltet sie die im Spiel verwendeten Audiodateien und bietet
entsprechende Funktionen, um diese abzuspielen. Die im Spiel verwendeten Audiodateien
stammen hierbei von der Internetpräsenz Soundjay4 . Die Klasse Player repräsentiert einen
Spieler. Über die Klasse kann das Spielerobjekt unter anderem zur Szene hinzugefügt, bewegt,
skaliert, seine Geschwindigkeit beschleunigt oder vermindert und die Anzahl seiner Punkte
erhöht oder gesenkt gewerden. Ähnliche Funktionen bieten die Klassen SimpleEnemy, die
nicht animierte, sich bewegende Feinde repräsentiert und AnimatedEnemy, die animierte, sich
bewegende Feinde repräsentiert. Die Klasse Object stellt die Objekte im Level dar, die vom
Spieler aufgesammelt werden können. Innerhalb der Levels gibt es Hindernisse und Objekte,
welche die Landschaft zieren und denen ausgewichen werden muss. Diese werden durch die
Klasse SceneryObject repräsentiert.
Der Ansatz mit dem Framework und der grundlegende Code dafür stammen aus dem Wiki
3
4
http://audiere.sourceforge.net/
http://www.soundjay.com/
62
6 Implementierung
der Internetpräsenz von OGRE.5
Die Klassen Player, Object, SceneryObject, SimpleEnemy und AnimatedEnemy repräsentieren jeweils auch ein dreidimensionales Objekt, das an den Szenengraphen angehängt wird.
Dies geschieht über den Szenenmanager. Wie zuvor bereits erwähnt, wird der Szenenmanager
innerhalb der Klasse OgreApplication erstellt. Wie erhalten nun die Unterklassen wie etwa
Player Zugriff auf den Szenenmanager? Da die Klasse Game von der Klasse OgreApplication
erbt, erhält sie auch Zugriff auf das Objekt des Szenenmanagers. Dieses wird wiederum über
den Konstruktor an die jeweiligen Objekte übergeben, damit sie Zugriff auf den Szenenmanager erhalten und so beispielsweise die Objekte zur Szene hinzugefügt oder gelöscht werden
können. Ähnlich wird bei dem Render Fenster und der Klasse Menu verfahren. Das Render
Fenster wird über den Konstruktor an die Menu Klasse weitergegeben. Dieses wird von CEGUI
benötigt, um die Menüs darstellen zu können.
Es wurde zuvor bereits erwähnt, dass sogenannte „Scene Nodes“ an den Szenengraphen
angehängt werden. Jedes Scene Node hat dabei nur einen Vaterknoten und keinen oder
mehrere Kinderknoten. Dies ähnelt einer Baumstruktur. Im Fall dieser Anwendung werden
alle Scene Nodes an das Wurzel-Scene-Node angehängt. Die Hierarchie wird in Abbildung
6.2 exemplarisch dargestellt. Es wäre weiterhin sinnvoll, diese Scene Nodes an ein jeweiliges
Level-Scene-Node anzuhängen, um eine bessere Hierarchie zu gewährleisten.
Abb. 6.2: Die Szenengraphhierarchie der Anwendung
5
Vgl. OGRE (2010a)
63
6 Implementierung
Wie weiter oben erwähnt, verwaltet die Game Klasse die Spielelogik. Über die Methode
frameStarted des FrameListeners werden zu Beginn eines jeden dargestellten Frames Kollisionen abgefragt. Es wird geprüft, ob der Spieler beispielsweise die Pausetaste gedrückt und
somit den Pausemodus aktiviert hat oder ob das Hauptmenü geöffnet wurde. All dies wird mit
Hilfe boolescher Variablen gelöst. Wird die Pausetaste gedrückt, so wird die entsprechende
Variable auf true gesetzt. Mit Hilfe einer if-Abfrage wird dann die Ausführung der anderen
Funktionen in der Methode frameStarted verhindert. In dieser Methode wird auch geprüft,
ob der Spieler verloren hat oder sich an einer bestimmten Stelle im Level befindet und dort
die Geschwindigkeit erhöht wird. Es werden innerhalb der Methode die Feinde, der Spieler
sowie die Kamera bewegt und Infotexte angezeigt. Alles was sich dynamisch während des
Spiels ändert, wird in der Methode frameStarted behandelt.
Über die Game Klasse wird auch die Konfigurationsdatei des Spiels ausgelesen, die derzeit
Einstellungen zur Schwierigkeit und zur Sprache des Spiels enthält. Die Einstellungen für
Auflösung und Vollbild können noch nicht verwendet werden. Diese Konfigurationsdatei
wird mit Hilfe von GLib, einer Teilbibliothek des GTK+6 Projektes, realisiert. GTK+ war
ursprünglich ein grafischer Werkzeugsatz für Gnome und XFCE, die beiden populärsten Linux
Desktopumgebungen.7 GLib kann unabhängig von GTK+ verwendet werden und verfügt
über vielfältige Funktionen wie beispielsweise Bäume, Listen, Funktionen für das Dateisystem
oder eben die Möglichkeit, sogenannte „Key Files“ auszulesen.8 Diese sind vergleichbar
mit .ini Dateien in Windows. Die Daten werden in Gruppen aufgeteilt, wobei der Name in
eckigen Klammern auftaucht. Kommentare werden mit der Raute eingeleitet. Mit Hilfe von
GLib kann auf die Gruppen und die darin befindlichen Attribute zugegriffen werden. Der
Code hierfür stammt aus einem von anderen Studenten mit OGRE realisierten Projekt und
wurde entsprechend an die Anwendung angepasst.9 In Algorithmus 6.3 ist die verwendete
Konfigurationsdatei abgebildet.
6
http://www.gtk.org/
Vgl. Krause (2007), S. 2
8
Vgl. Krause (2007), S. 159
9
http://decoy.addictedtocreation.com/
7
64
6 Implementierung
Algorithmus 6.3 Konfigurationsdatei des Spiels
# This is the Settings file for DodgeHead
# It contains all necessary settings for the game
[Graphic]
Resolution=1024x768
Fullscreen=true
[Language]
#english=en, german=de
Language=en
[Gameplay]
#Easy=0, Medium=1, Hard=2
Difficulty=0
6.2.2 Implementierung der Ansätze für die Lehre
Die Theorie der Computer Grafik wird innerhalb der Anwendung über verschiedene Ansätze
vermittelt, die in diesem Abschnitt näher erläutert werden.
Levels
Die Levels orientieren sich an verschiedenen Themengebieten der Computer Grafik. Das erste
Level enthält die Basis und zeigt den Prozess der Rasterung und lehrt darüber hinaus grundlegende Bereiche der Computer Grafik. Das zweite Level behandelt Backface Culling, Clipping
und Farben sowie deren Interpolation. Das dritte Level führt Texturen ein, das vierte Level
enthält Beleuchtung und damit verbunden Shading und das fünfte Level beschäftigt sich mit
fortgeschrittenen Themen wie Bump Mapping und Shadern. Der Aufbau der Levels entspricht
somit weitestgehend dem an der Hochschule Reutlingen gelehrten Kurs der Computer Grafik.
Hierbei wurden die Themen in den Levels parallel zu den Folien des Kurses angeordnet. Die
Levels werden direkt im Code mit Hilfe von Objekten von OGRE realisiert. Die Hindernisse
im Level sind dabei von OGRE vorgegebene Modelle, die je nach Situation skaliert werden,
um sie beispielsweise breiter oder höher zu machen. Da die Levels direkt im Code erstellt
sind, muss jedes Objekt von Hand im dreidimensionalen Raum platziert werden. Hier wäre in
Zukunft die Verwendung eines Leveleditors ratsam.
65
6 Implementierung
Abb. 6.3: Lehre der Konzepte: Thematik der Levels (Level 1 bis Level 5 von links nach rechts)
Informationsfenster und Informationstext
Über einen Tastendruck ist es jederzeit möglich, während des Spiels Informationen abzurufen. Dabei wird das Spiel pausiert und ein Fenster mit Informationen eingeblendet. Diese
Informationen haben Bezug zum Level, in dem sich der Spieler aktuell befindet. Das erste
Level behandelt die Grundzüge der Computer Grafik, wie beispielsweise die Rasterung. Zu
diesem Thema werden dann im ersten Level Hintergrunddetails zum Verfahren und andere
damit verbundene Informationen über das Informationsfenster eingeblendet. Der Spieler erhält
damit ein tiefgehenderes Wissen über die Theorie, die hinter der praktischen Umsetzung
des Levels steht. Dieses Informationsfenster ist Teil der Klasse Menu und somit der mit
Hilfe von CEGUI erstellten Benutzeroberfläche. Die Texte befinden sich dabei getrennt nach
Levels in separaten XML Dateien. Je nach Levelnummer wird hier im Code über die Methode
showInfoScreen(infoScreen) der Klasse Menu das entsprechende Informationsfenster geladen
und angezeigt. Dabei wird in der Klasse Game abgefragt, welches Level aktuell geladen ist
und der Methode showInfoScreen übergeben.
Weiterhin wird an der linken Seite des Bildschirms über die Methode updateInfobox(infoText)
der Klasse GameOverlay ein Informationstext eingeblendet, der sich abhängig von der Position des Spielerobjektes im Level verändert. Diese Position wird innerhalb der Methode
frameStarted abgefragt. Hier können Informationen zu den verwendeten Techniken bezüglich
der Computer Grafik, aber auch allgemeine Hinweise zum Spiel eingeblendet werden.
66
6 Implementierung
Abb. 6.4: Lehre der Konzepte: Informationsfenster während des Spiels
Matrixmanipulation
Der Spieler erlernt die Theorie der Computer Grafik interaktiv. Das geschieht innerhalb des
Spiels unter anderem mit Hilfe eines Menüs, welches Eingabefelder in der Anordnung einer
4x4 Matrix beinhaltet. Hat der Spieler zu wenig Energie und steht kurz vor dem Verlust
des letzten Lebens, so erhält er die Möglichkeit über diese Matrix das Spielerobjekt zu
transformieren. Konkret kann das Spielerobjekt dadurch verschoben (Translationsmatrix)
und skaliert (Skalierungsmatrix) werden. Im letzten Level ist es beispielsweise notwendig,
das Spielerobjekt zu skalieren, um damit enge Passagen passieren zu können und somit
den Verlust von Energie zu vermeiden. Eine Matrix ist ein rechteckiges Array von m x n
Skalaren. Matrizen sind ein komfortabler Weg, um lineare Transformationen wie Translation,
Rotation und Skalierung darzustellen.10 Dabei wird die Matrix des Objektes nicht direkt
mit einer Transformationsmatrix multipliziert. Es werden die entsprechenden Werte aus der
eingegebenen Matrix extrahiert und an vordefinierte Funktionen von OGRE für Translation
und Skalierung weitergegeben. Intern rechnet OGRE nicht mit 4x4 Matrizen, daher ist eine
direkte Matrixmultiplikation nicht möglich. Auch dieses eben angesprochene Matrixmenü ist
ein Teil der Menu Klasse und wurde mit Hilfe von CEGUI erstellt. Über die Callback Funktion,
10
Vgl. Gregory (2009), S. 151
67
6 Implementierung
die an den „Bestätigen“-Button des Matrix Menüs gebunden ist, werden anschließend die im
Menü eingegebenen Werte der Matrix an das entsprechende Attribut mMatrix der Klasse
Menu übergeben. Wird der „Bestätigen“-Button nicht gedrückt, so laufen 30 Sekunden ab
und die Werte werden automatisch weitergegeben. Das Attribut mMatrix ist hierbei vom Typ
Matrix4. Dies ist ein von OGRE vorgegebener Typ. In der Klasse Game wird dieses Menü über
die Methode showMatrixMenu() aufgerufen, wenn der Spieler kurz vor dem Verlieren steht.
Anschließend werden die Werte der Matrix aus dem Menü an eine Methode des Spielerobjektes
namens transformByMatrix() übergeben.
Abb. 6.5: Lehre der Konzepte: Matrizenrechnung über das Matrixmenü
Materialsystem
Über OGREs Materialsystem ist es möglich, ohne erneutes Kompilieren der Anwendung
Änderungen an Farben, Texturen, Shadern oder Partikeln vorzunehmen. Dadurch kann man
einfach mit den Materialien experimentieren und anschließend die Ergebnisse in der Anwendung
betrachten. Die Farben lassen sich beispielsweise einfach abändern, dadurch kann mit den
ambienten, diffusen und spekularen Anteilen experimentiert werden. Bei den Texturen können
verschiedene Formen des Mappings getestet oder gar die gesamte Textur ausgetauscht werden.
Auch mit Partikeln kann experimentiert werden. Für die Anwendung werden beispielsweise
beim Aufsammeln von Objekten Partikel angezeigt, die mit OGREs Partikelsystem realisiert
werden. Hierbei wird auf vorgefertigte Partikelsysteme zurückgegriffen.
68
6 Implementierung
Shader
Shader sind ein fortgeschrittenes Gebiet der Computer Grafik. In Kapitel 2.1.2 auf Seite 7
wurde bereits erwähnt, dass es zwei verschiedene Arten von Shadern gibt, Vertex Shader und
Pixel Shader. Vertex Shader ermöglichen es, die Zeichnung basierend auf Vertex Attributen
wie Positionen, Normalen und Farben zu kontrollieren. Ein einfacher Vertex Shader könnte
beispielsweise ein dreieckiges Polygonnetz zeichnen, bei dem der Benutzer die Vertex Positionen
und die Farben selbst angibt. Pixel Shader ermöglichen es, die Zeichnung auf bildbasierten
Attributen vorzunehmen. Ein einfacher Pixel Shader könnte beispielsweise Vertex Positionen,
Texturkoordinaten und eine Textur (Bild) interpolieren und die finalen Pixel füllen, die zum
gezeichneten Objekt gehören. Das Schreiben von Shadern kann anspruchsvoller sein als die
Verwendung der „fixed-function pipeline“.11 Mit Hilfe von Shadern werden innerhalb der
Anwendung verschiedene Effekte realisiert, wie beispielsweise der Bloom-Effekt (Glüh-Effekt)
im fünften Level der Anwendung oder die Verzerrung der Sicht, wenn man ein schwarzes
Objekt aufsammelt. Diese Shader werden dabei wie zuvor erwähnt über das Materialsystem
von OGRE realisiert. Es wird hierbei auf vordefinierte Shader zurückgegriffen, sie wurden
nicht selbst geschrieben.
Texturieren
In einer frühen Version befindet sich ein weiterer Ansatz der Lehre, bei dem das Spielerobjekt
selbst mit Texturen versehen werden kann. Dadurch sollen die Verfahren des Texture Mappings
veranschaulicht werden. Über ein mit CEGUI angefertiges Menü kann der Spieler in der
aktuellen Version der Anwendung die Texturen des Spielerobjektes anpassen, beispielsweise
von den Augen, Zähnen, Ohrringen oder dem Körper. Dabei kann zunächst das Körperteil
und anschließend eine passende Textur ausgesucht werden. Um dies zu ermöglichen, wird dem
Menüobjekt bei der Erstellung ein Zeiger auf das Spielerobjekt übergeben. Wird ein Körperteil
und anschließend eine Textur ausgesucht, so wird über eine Callback Funktion die Methode
activateTexture(itemTexture, itemTextureSubEntity) des Spielerobjektes aufgerufen. Dabei
wird der Methode die Nummer der Textur und die Nummer des Subentitys übergeben. Über
eine switch-Anweisung kombiniert mit einer if-Anweisung wird dann abgefragt, um welches
Körperteil es sich handelt und welche Textur darauf angewendet werden soll.
11
Vgl. Eberly, 2005, S. 149 f.
69
6 Implementierung
Abb. 6.6: Lehre der Konzepte: Selbstständiges Texturieren
Grafische Benutzeroberfläche und Mehrsprachigkeit
Für die grafische Benutzeroberfläche des Spiels wurde zum einen CEGUI und zum anderen das
Overlay-System von OGRE verwendet. CEGUI ist eine Abkürzung und steht für Crazy Eddie’s
GUI System. Dabei wurden für die entsprechenden interaktiven grafischen Menüfenster, die mit
Hilfe von CEGUI erstellt wurden, sogenannte Layout-Dateien angelegt. Diese Layout-Dateien
enthalten XML Code, der den Aufbau eines Fensters beschreibt. CEGUI ist in der Lage,
diese XML Dateien zu parsen und die entsprechenden Oberflächen zu konstruieren. CEGUI
beherrscht viele Elemente wie scrollbare Bereiche, Checkboxen, Dropdown Comboboxen
und viele andere. Wird hier ein Knopf gedrückt oder eine Combobox verwendet, so lassen
sich über sogenannte Callback Funktionen anschließend bestimmte Ereignisse auslösen, wie
beispielsweise das Schließen des aktuellen und das Öffnen eines neuen Menüs.
Für nicht interaktive Elemente der grafischen Benutzeroberfläche wurde das Overlay-System
von OGRE verwendet. Ein Overlay (dt. Überlagerung) überlagert, wie aus dem Namen bereits
ersichtlich, alle anderen Elemente in einer Szene.12 Hiermit werden die Punktzahl, die Energie,
die Leben und die Position des Spielers dargestellt. Wenn der Spieler mit einem Objekt
kollidiert, werden am Bildschirmrand vier rote Quadrate eingeblendet, die den Benutzer über
12
Vgl. Junker (2006), S. 227
70
6 Implementierung
einen Zusammenstoß informieren. Der Informationstext an der linken Seite des Bildschirms
wurde ebenfalls als Overlay realisiert. Über entsprechende Methoden wie showOverlay(),
hideOverlay() und updateOverlay() lassen sich die Overlay-Elemente einblenden, verbergen
oder aktualisieren. Die Codegrundlage für die Overlay-Dateien stammt aus dem Kapitel über
OGRE Programmierung aus Deitel (2007).
Zudem ist es aufgrund der im Abschnitt 6.2.1 erwähnten Konfigurationsdatei möglich, das
Spiel in mehreren Sprachen zu spielen. Wie bereits erwähnt, basieren die Layout-Dateien
auf dem XML Format. Dadurch ist es möglich, für jede Sprache eine andere XML Datei zur
Verfügung zu stellen. Dabei haben die Dateien für die englische Sprachversion beispielsweise
den Namen „menuname_en.layout“. Das Kürzel „en“ steht dabei für Englisch. Wird nun in
der Konfigurationsdatei Englisch als Sprache angegeben, wird beim Laden der XML Dateien
der Name der Layout Datei, wie beispielsweise „menuname_“ mit dem Kürzel „en“ aus der
Konfigurationsdatei und dem Dateiende „.layout“ konkateniert. Dadurch werden immer die in
der Konfigurationsdatei angegebenen Sprachdateien geladen.
Abb. 6.7: Grafische Benutzeroberfläche: Das Hauptmenü
71
6 Implementierung
6.3 Probleme und Lösungen bei der Implementierung
Während der Implementierung traten Probleme verschiedener Art auf. Diese galt es, durch
bestimmte Herangehensweisen und Methoden zu lösen. Dieser Abschnitt geht auf die Probleme
ein und erläutert die entsprechenden Lösungsansätze.
6.3.1 Kollisionserkennung
Für die Umsetzung von Kollisionserkennung existieren keine repräsentativen, aussagekräftigen
Beispiele in der Dokumentation und der Literatur von OGRE, die die Verwendung einer
herkömmlichen Methode der Kollisionserkennung erklären. Daher wurde selbst eine simple
Kollisionserkennung implementiert. Zwar wird das Spiel dreidimensional dargestellt, jedoch
spielt die y-Achse keine Rolle in der Logik des Spiels. Die Kollision mit den Objekten
spielt sich ausschließlich auf der x-Achse und der z-Achse ab. Hierbei wurde mit der Axis
Aligned Bounding Box (AABB) der jeweiligen Objekte (Entitys) gearbeitet. Eine Axis Aligned
Bounding Box ist eine einfache, sechsseitige Box, bei der jede Seite parallel zu einer der
Hauptebenen (engl. cardinal planes) steht.13 Hierbei wird berechnet, ob sich der maximale
bzw. minimale x-Wert der AABB des Spielers - ausgehend von der aktuellen x-Position des
Spielerobjektes - im Bereich der AABB eines anderen Objektes befindet. Selbiges gilt für
den z-Wert der AABB des Spielerobjektes. Problematisch ist hierbei, dass die AABB einen
größeren Bereich abdeckt, als die Objekte eigentlich einnehmen. Dadurch kommt es bereits
zu Kollisionen, wenn sich die sichtbaren Teile der Objekte gar nicht berühren. Aufgrund dieser
Tatsache werden bei der Abfrage einige Einheiten abgezogen, damit die Kollisionserkennung
etwas toleranter wird.
13
Vgl. Dunn und Parberry (2002), S. 248
72
6 Implementierung
Abb. 6.8: Kollisionserkennung: Axis Aligned Bounding Box
Algorithmus 6.4 Kollisionserkennung zwischen Spieler und Hindernissen
/∗ Wenn s i c h d e r ä u ß e r s t e Punkt d e r Bounding Box d e s S p i e l e r s i n
p o s i t i v e r s o w i e n e g a t i v e r x−R i c h t u n g ( a u s g e h e n d von d e r a k t u e l l e n
S p i e l e r p o s i t i o n a u f d e r x−Achse ) i n n e r h a l b d e s B e r e i c h e s d e r
Bounding Box d e s H i n d e r n i s s e s b e f i n d e t . . . ∗/
i f ( ( p l a y e r −>g e t P o s i t i o n ( ) . x + ( p l a y e r −>getAABB ( ) . getMaximum ( ) . x − 1 5 )
>= m S c e n e r y O b j e c t I t e r a t o r −>g e t P o s i t i o n ( ) . x − (
m S c e n e r y O b j e c t I t e r a t o r −>getAABB ( ) . getMaximum ( ) . x ) ) && ( p l a y e r −>
g e t P o s i t i o n ( ) . x − ( p l a y e r −>getAABB ( ) . getMaximum ( ) . x − 1 5 ) <=
m S c e n e r y O b j e c t I t e r a t o r −>g e t P o s i t i o n ( ) . x + ( m S c e n e r y O b j e c t I t e r a t o r
−>getAABB ( ) . getMaximum ( ) . x ) ) ) {
/∗ . . .
s e l b i g e s f ü r d i e z−Achse p r ü f e n ∗/
i f ( ( p l a y e r −>g e t P o s i t i o n ( ) . z − ( p l a y e r −>getAABB ( ) . getMaximum ( ) . z −
1 5 ) <= m S c e n e r y O b j e c t I t e r a t o r −>g e t P o s i t i o n ( ) . z + (
m S c e n e r y O b j e c t I t e r a t o r −>getAABB ( ) . getMaximum ( ) . z ) ) && ( p l a y e r −>
g e t P o s i t i o n ( ) . z + ( p l a y e r −>getAABB ( ) . getMaximum ( ) . z − 1 5 ) >=
m S c e n e r y O b j e c t I t e r a t o r −>g e t P o s i t i o n ( ) . z − (
m S c e n e r y O b j e c t I t e r a t o r −>getAABB ( ) . getMaximum ( ) . z ) ) ) {
/∗ K o l l i s i o n h a t s t a t t g e f u n d e n ∗/
return true ;
}
}
73
6 Implementierung
6.3.2 Laden und Entladen der Levels
Wie zuvor erwähnt, befinden sich die Levels „hard gecoded“ in der Level Klasse. Zu Beginn
der Entwicklung waren die Objekte für jeden Level, wie beispielsweise Hindernisse, Gegner und
aufsammelbare Objekte, in herkömmlichen Arrays gespeichert. Dies setzte allerdings voraus,
dass für jeden Level und für jeden Objekttyp ein eigenes Array mit einer festen Länge angelegt
werden musste. Im späteren Verlauf der Entwicklung fiel auf, dass die Levels dynamisch
zur Laufzeit geladen werden mussten. Beispielsweise, wenn etwa das nächste Level erreicht
wurde. Die naheliegende Lösung war hier, ein dynamisch befüllbares Array zu verwenden. C++
bietet hierfür die Standard Template Library (STL) an. Diese ist in der Standardbibliothek
von C++ enthalten und wurde von Hewlett Packard bzw. Alex Stepanov entwickelt. In
Form von Templates werden durch die STL Klassen für verschiedene Bereiche zur Verfügung
gestellt, unter anderem die Vector Klasse. Diese stellt arrayähnliche Listen für verschiedene
Datentypen bereit.14 Dadurch war es möglich, diese arrayähnlichen Listen zur Laufzeit zu
löschen und mit Levelobjekten zu befüllen. Mit Hilfe eines Iterators werden die Listen dann
durchlaufen und die einzelnen Objekte über die Methode addToScene() hinzugefügt. Werden
die Objekte gelöscht, so wird die Liste ebenfalls mit einem Iterator durchlaufen und jeweils die
Methode removeFromScene() aufgerufen. Auf diese Weise wird auch die zuvor beschriebene
Kollisionserkennung für einzelne Objekte durchgeführt.
6.3.3 Darstellung von Terrain
Zur detaillierteren grafischen Darstellung des Spiels wurde versucht, ein Terrain darzustellen,
welches die Levels umgeben sollte. Dies wurde mit Hilfe des Terrain Szenenmanagers von
OGRE und einer Heightmap gelöst. Leider ließ sich dabei die Position des Terrains nicht
verschieben, es wurde automatisch am Ursprung des Koordinatensystems in positiver Richtung
der z-Achse erstellt. Dadurch wäre es nötig gewesen, die bereits implementierten Teile des
Spiels so anzupassen, dass sie sich um das Terrain herum anordnen. Als Lösung wurde im
Forum von OGRE eine neue Version des Terrain Szenenmanagers gefunden, der sich zur Zeit
der Arbeit noch in einer frühen Version befand und Abhilfe für diese Probleme schaffen soll.
Bedauerlicherweise hätte hierfür eine unstabile Version von OGRE installiert werden müssen.
Zudem ist der neue Terrain Szenenmanager noch nicht dokumentiert und es existieren wenige
14
Vgl. Erlenkötter (2005), S. 271 f.
74
6 Implementierung
Beispiele. Letztendlich wurde die Darstellung von Terrain verworfen. Eine Alternative wäre
bei einer zukünftig geplanten Darstellung von Terrain die Erstellung eines Mesh-Objektes in
einem Modellierungswerkzeug wie 3dsmax mit Hilfe einer Heightmap. Diese könnte dann um
die Hauptstrecke der Levels herum angeordnet werden, so wie die anderen Objekte bisher
auch. Vor allem wenn keine Kollision mit diesem Terrain berechnet werden müsste, wäre diese
eine angemessene Lösung.
Gegen Ende der Arbeit wurde der erste Release Candidate der OGRE Version 1.7.0 veröffentlicht, der den neuen Terrain Szenenmanager enthält.15
15
Vgl. OGRE (2010b)
75
7 Fazit und Ausblick
7.1 Fazit
In dieser Arbeit sollte untersucht werden, ob Game Engines für den Zweck der Lehre, speziell
für den Bereich der Computer Grafik, eingesetzt werden können. Im Verlauf der Arbeit wurde
der genaue Unterschied zwischen einer reinen Grafik Engine und einer Game Engine, sowie
deren Komponenten näher erläutert. Es wurden die unterschiedlichen Anwendungsgebiete von
Game Engines sowie einige populäre Beispiele dieser Engines aus dem kommerziellen sowie
quelloffenen Bereich aufgezeigt. Im weiteren Vorgehen wurde mit Hilfe selbst erarbeiteter
Kriterien und der Nutzwertanalyse systematisch eine geeignete Engine, in diesem Fall OGRE,
herausgearbeitet. Diese wurde anschließend anhand eines zuvor konzipierten Spiels demonstriert. Dabei wurde auch versucht, Ansätze für die Lehre der Theorie der Computer Grafik
zu schaffen. Mit Hilfe eines Fragebogens wurde eine genauere Evaluierung der Anwendung
vorgenommen, um positive Aspekte, Potentiale und Schwachstellen in Erfahrung zu bringen
sowie um zu prüfen, ob die Anwendung bereits eine sinnvolle Unterstützung für die Lehre
darstellt. Der Fragebogen hat dabei gezeigt, dass die Befragten bisher noch keinen Lerneffekt
erkennen können. Die Anwendung selbst ist noch nicht ausgereift genug, es mangelt an
spielerischer Interaktion zum Erlernen der Theorie und sie leidet noch an Fehlern. Außerdem
ist das Spiel trotz verschiedener Schwierigkeitsgrade offenbar noch zu schwer und es mangelt
insgesamt an Abwechslung. Dabei sind sich drei der vier Befragten dennoch einig, dass das
spielerische Erlernen Sinn macht. Es ist allerdings anzumerken, dass die Befragten offenbar
nicht sehr viel Zeit in die Evaluierung investiert haben. Es lässt sich teilweise erkennen, dass
die Anwendung nur oberflächlich und flüchtig getestet wurde. Aus diesem Grund und aufgrund
der geringen Rückmeldung sind die Ergebnisse des Fragebogens daher kritisch zu betrachten.
Andere Arbeiten, wie beispielsweise Ganovelli und Corsini (2009) und Clua u. a. (2006) haben
jedoch bereits gezeigt, dass Studenten durch den praktischen und spielerischen Ansatz und
das personalisierte Lernen eine erhöhte Motivation zeigen.1 Aus diesen Erkenntnissen lässt
1
Vgl. Ganovelli und Corsini (2009), S. 2032
76
7 Fazit und Ausblick
sich schließen, dass die Verwendung von Game Engines auch in der Lehre im Bereich der
Computer Grafik Sinn macht, auch wenn die entwickelte Anwendung den Zweck noch nicht
ausreichend erfüllt.
Die für diesen Zweck eingesetzte Engine, OGRE, hat sich abschließend betrachtet als gute
Wahl erwiesen. Die Verwendung der Engine war insgesamt einfach, es mangelte lediglich an der
praktischen Integration neuer Komponenten und die Einrichtung der Entwicklungsumgebung
war stellenweise mühevoll. Beispielsweise wurde während der Entwicklung versucht, eine
Physikengine zu integrieren, was aufgrund fehlender Abhängigkeiten in der Entwicklungsumgebung und Inkompatibilitäten zwischen verschiedenen Codebestandteilen aufgegeben wurde.
Zudem war die Erstellung der interaktiven Benutzeroberfläche mit CEGUI ebenfalls mühevoll
und wenig intuitiv. Ein weiterer Kritikpunkt ist die Abhängigkeit von vielen DLLs. Hinsichtlich
dieser Mängel würde es sich lohnen, die nächstbessere Engine Irrlicht als Alternative zu
prüfen. Möglicherweise ist hier die Integration neuer Bestandteile oder die Erstellung von
Benutzeroberflächen einfacher und intuitiver gehalten. Für die Verwendung in der Lehre ist
OGRE jedoch mehr als ausreichend.
7.2 Ausblick
Es ist geplant, die im Rahmen dieser Thesis entwickelte Anwendung im Kurs Computer
Grafik der Hochschule Reutlingen zu verwenden. Aller Wahrscheinlichkeit nach wird sie zur
Unterstützung in der Vorlesung und zur Prüfungsvorbereitung eingesetzt. Wie zuvor bereits
erwähnt, weist die Anwendung bisher noch einige Mängel auf und bedarf daher einer weiteren
Überarbeitung. Die Grundlagen für Erweiterbarkeit, Konfiguration, Mehrsprachigkeit und
einige Ansätze für die Lehre wurden gegeben. Hinsichtlich der Lehre der Computer Grafik
gilt es, weitere Ansätze zu implementieren, die das interaktive Erlernen ermöglichen. Als
weitere Möglichkeit wurde ein Quiz innerhalb der Anwendung angedacht, bei dem der Spieler
Fragen aus dem Bereich der Computer Grafik beantworten muss, um beispielsweise ein Level
zu beenden. Weiterhin ist bereits der Ansatz implementiert, eine eigene Texturierung des
Spielerobjektes vornehmen zu können. Hier sollte noch die Möglichkeit gegeben werden, die
verschiedenen Methoden des Texture Mappings verwenden zu können. Weiterhin könnten
interaktive Ansätze zum Erlernen von Beleuchtung integriert werden. Beispielsweise durch
die eigene Platzierung von Lichtquellen und die Festlegung der Art von jenen, wie etwa
77
7 Fazit und Ausblick
Richtungslichter oder Punktlichtquellen. Zudem sollte die Schwierigkeit des Spiels und damit
verbunden die Geschwindigkeit gesenkt werden, damit sich die Anwender mehr auf das
Erlernen der Theorie konzentrieren können.
Abgesehen von der Einführung weiterer Elemente und der Beseitigung von Fehlern, sollte ein
Redesign einiger Komponenten der Anwendung in Betracht gezogen werden. Die Levelklasse
enthält beispielsweise alle Levels, sollte jedoch nur einen Level repräsentieren. Hinsichtlich der
Architektur könnten die im Konzept angedachten abstrakten Klassen umgesetzt werden. Ein
guter Ansatz wäre es, die Hierarchie des Szenengraphen zu verbessern und somit übersichtlicher
zu machen. Derzeit werden die Scene Nodes einfach an den Wurzelknoten des Szenengraphen
angehängt und nicht etwa nach Levels organisiert. Die Entwicklung oder Verwendung eines
Leveleditors wäre ebenfalls empfehlenswert, da sonst weitere Levels aufwändig von Hand
erstellt oder bearbeitet werden müssten. Abgesehen davon werden in der Anwendung bisher
noch keine Fehler abgefangen und verarbeitet. Da im Spiel auch fortgeschrittene Techniken
wie Shader verwendet werden, sollte eine Prüfung der Hardwarefähigkeiten vorgenommen
werden, damit das System bei ungenügender Hardware nicht einfach abstürzt.
Wurden alle Fehler beseitigt und weitere Ansätze zum Erlernen der Theorie integriert, sollte
eine erneute Prüfung der Anwendung vorgenommen werden. Wenn möglich mit direktem
Feedback in der Vorlesung Computer Grafik. Dies würde wahrscheinlich einen, wie in diesem
Fall, mangelhaft ausgefüllten Fragebogen verhindern. Außerdem könnte dadurch getestet
werden, ob das Spiel unter der begleitenden Didaktik eines Lehrers eine bessere Wirkung
erzielt.
78
Literaturverzeichnis
[Adam 1996] Adam, Dietrich: Planung und Entscheidung - Modelle, Ziele, Methoden. 4.
Auflage. Gabler, Wiesbaden, 1996
[Brede 2005] Brede, Helmut: Grundzüge der öffentlichen Betriebswirtschaft. 2. Auflage.
Oldenbourg Wissenschaftsverlag, München, 2005
[Bundesverband Interaktive Unterhaltungssoftware 2009] Bundesverband Interaktive Unterhaltungssoftware: Marktzahlen Computer- und Videospiele - 1. Halbjahr 2009. 2009. – URL http://www.biu-online.de/fileadmin/user/dateien/
BIU-Marktzahlen_1._Halbjahr_2009.pdf. – [Online; Stand 08. Oktober 2009]
[Burd u. a. 2007] Burd, Bary ; Goulden, John ; Ladd, Brian ; Rogers, Michael ;
Stewart, Kris: Computer games in the classroom, or, how to get perfect attendance,
even at 8 AM. In: SIGCSE ’07: Proceedings of the 38th SIGCSE technical symposium on
Computer science education. New York, NY, USA : ACM, 2007, S. 496–496. – ISBN
1-59593-361-1
[Clua u. a. 2006] Clua, Esteban ; Feijó, Bruno ; Rocca, Jason ; Schwartz, Jon ;
Graças, Maria das ; Perlin, Ken ; Tori, Romero ; Barnes, Tiffany: Game and
interactivity in computer science education. In: SIGGRAPH ’06: ACM SIGGRAPH 2006
Educators program. New York, NY, USA : ACM, 2006, S. 2. – ISBN 1-59593-364-6
[CryEngine 2 2009] CryEngine 2: Technology. 2009. – URL http://www.cryengine2.
com/index.php?pnr=1&conid=2. – [Online; Stand 06. Dezember 2009]
[Crystal Space 2009]
Crystal Space: Features. 2009. – URL http://www.
crystalspace3d.org/main/Features. – [Online; Stand 12. Dezember 2009]
[Crytek 2009]
Crytek:
Free Educational License for CryENGINE® 3.
2009.
–
URL http://www.crytek.com/news/news/?tx_ttnews[tt_news]=165&tx_
ttnews[backPid]=1&cHash=8966bc7019. – [Online; Stand 06. Dezember 2009]
[Deitel 2007] Deitel, Paul J.: C++ How to Program. 6. Auflage. Prentice Hall, New
Jersey, 2007
[Dunn und Parberry 2002] Dunn, Fletcher ; Parberry, Ian: 3D Math Primer for Graphics
and Game Development. Wordware Publishing, Plano, Texas, 2002
[Eberly 2005] Eberly, David H.: 3D Game Engine Architecture - Engineering Real-Time
Applications with Wild Magic. Morgan Kaufmann, San Francisco, 2005
79
Literaturverzeichnis
[Erlenkötter 2005] Erlenkötter, Helmut ; Moos, Ludwig (Hrsg.): C++: Objektorientiertes Programmieren von Anfang an. 8. Auflage. Rowohlt Verlag, Reinbek, 2005
[Fritsch und Kada 2004] Fritsch, Dieter ; Kada, Martin: Visualisation Using Game
Engines. In: ISPRS Commission 5 (2004), S. 621–625
[Gamebryo 2009] Gamebryo: Gamebryo Gaming Engine. 2009. – URL http://www.
emergent.net/en/Products/Gamebryo/. – [Online; Stand 18. September 2009]
[Ganovelli und Corsini 2009] Ganovelli, Fabio ; Corsini, Massimiliano: eNVyMyCar: a
multi-player car racing game for teaching Computer Graphics. In: Computer Graphics Forum
28 (2009), dec, Nr. 8, S. 2025–2032. – URL http://vcg.isti.cnr.it/Publications/
2009/GC09
[Gregory 2009] Gregory, Jason ; Lander, Jeff (Hrsg.) ; Whiting, Matt (Hrsg.): Game
Engine Architecture. A K Peters Ltd., Natick, 2009
[Herrlich 2007] Herrlich, Marc: A Tool for Landscape Architecture Based on Computer
Game Technology. In: ICAT ’07: Proceedings of the 17th International Conference on
Artificial Reality and Telexistence. Washington, DC, USA : IEEE Computer Society, 2007,
S. 264–268. – ISBN 0-7695-3056-7
[ID Software 2009a]
ID Software: Internetpräsenz. 2009. – URL http://www.
idsoftware.com/business/idtech4/. – [Online; Stand 10. Oktober 2009]
[ID Software 2009b] ID Software: Technology Licensing. 2009. – URL http://www.
idsoftware.com/business/technology/. – [Online; Stand 18. September 2009]
[Irrlicht 2009] Irrlicht: Features. 2009. – URL http://irrlicht.sourceforge.net/
features.html. – [Online; Stand 18. September 2009]
[Jacobson und Lewis 2005] Jacobson, Jeffrey ; Lewis, Michael: Game Engine Virtual
Reality with CaveUT. In: Computer 38 (2005), Nr. 4, S. 79–82. – ISSN 0018-9162
[jMonkeyEngine 2009] jMonkeyEngine: About jMonkey. 2009. – URL http://www.
jmonkeyengine.com/wiki/doku.php?id=about_jme. – [Online; Stand 18. September
2009]
[Junker 2006]
Junker, Gregory: Pro OGRE 3D Programming. Apress, New York, 2006
[Kot u. a. 2005] Kot, Blazej ; Wuensche, Burkhard ; Grundy, John ; Hosking, John:
Information visualisation utilising 3D computer game engines case study: a source code
comprehension tool. In: CHINZ ’05: Proceedings of the 6th ACM SIGCHI New Zealand
chapter’s international conference on Computer-human interaction. New York, NY, USA :
ACM, 2005, S. 53–60. – ISBN 1-59593-036-1
[Krause 2007]
2007
Krause, Andrew: Foundations of GTK+ Development. Apress, New York,
80
Literaturverzeichnis
[Lobao u. a. 2009] Lobao, Alexandre S. ; Evangelista, Bruno ; Leal De Farias,
Jose A. ; Grootjans, Riemer: Beginning XNA 3.0 - Game Programming From Novice
to Professional. Apress, New York, 2009
[Marinska 2010] Marinska, Silviya: Untersuchung von Serious Games-Methoden für die
Verwendung in der Informatik Ausbildung, Hochschule Reutlingen, Bachelor Thesis, 2010
[Marks u. a. 2007] Marks, Stefan ; Windsor, John ; Wünsche, Burkhard: Evaluation
of game engines for simulated surgical training. In: GRAPHITE ’07: Proceedings of the 5th
international conference on Computer graphics and interactive techniques in Australia and
Southeast Asia. New York, NY, USA : ACM, 2007, S. 273–280. – ISBN 978-1-59593-912-8
[Mól u. a. 2008] Mól, Antônio Carlos A. ; Jorge, Carlos Alexandre F. ; Couto, Pedro M.:
Using a Game Engine for VR Simulations in Evacuation Planning. In: IEEE Computer
Graphics and Applications 28 (2008), S. 6–12. – ISSN 0272-1716
[Nebula Device 2009] Nebula Device: What is the Nebula Device? 2009. – URL
http://nebuladevice.cubik.org/what-is-n2/. – [Online; Stand 18. September 2009]
[NxOgre 2009] NxOgre: What is it? 2009. – URL http://nxogre.org/what. – [Online;
Stand 11. Dezember 2009]
[Ogitor 2009] Ogitor: About. 2009. – URL http://www.ogitor.org/about/. –
[Online; Stand 05. Dezember 2009]
[OGRE 2009a] OGRE: CEGUI. 2009. – URL http://www.ogre3d.org/wiki/index.
php/CEGUI. – [Online; Stand 05. Dezember 2009]
[OGRE 2009b] OGRE: Documentation Architecture. 2009. – URL http://www.ogre3d.
org/wiki/index.php/Documentation_Architecture. – [Online; Stand 08. Dezember
2009]
[OGRE 2009c] OGRE: OgreAL. 2009. – URL http://www.ogre3d.org/wiki/index.
php/OgreAL. – [Online; Stand 05. Dezember 2009]
[OGRE 2009d] OGRE: OIS. 2009. – URL http://www.ogre3d.org/wiki/index.php/
OIS. – [Online; Stand 05. Dezember 2009]
[OGRE 2009e] OGRE: Team. 2009. – URL http://www.ogre3d.org/about/team. –
[Online; Stand 08. Dezember 2009]
[OGRE 2010a] OGRE: Example Framework Demystified. 2010. – URL http://www.
ogre3d.org/wiki/index.php/Example_Framework_Demystified. – [Online; Stand
06. Januar 2010]
[OGRE 2010b] OGRE: OGRE 1.7.0 RC1 [Cthugha] Released! 2010. – URL http://www.
ogre3d.org/2009/12/31/ogre-1-7-0-rc1-cthugha-released. – [Online; Stand 08.
Januar 2010]
81
Literaturverzeichnis
[Open Dynamics Engine 2009] Open Dynamics Engine: User Guide. 2009. – URL
http://www.ode.org/ode-latest-userguide.html. – [Online; Stand 09. Dezember
2009]
[Panda3D 2009] Panda3D: Welcome to Panda3D. 2009. – URL http://www.panda3d.
org/. – [Online; Stand 18. September 2009]
[Schell 2008] Schell, Jesse: The Art of Game Design: A Book of Lenses. Morgan
Kaufmann, San Francisco, 2008
[Shabanah und Chen 2009] Shabanah, Sahar ; Chen, Jim X.: Simplifying algorithm
learning using serious games. In: WCCCE ’09: Proceedings of the 14th Western Canadian
Conference on Computing Education. New York, NY, USA : ACM, 2009, S. 34–41. – ISBN
978-1-60558-415-7
[Shultz 2006] Shultz, Gerald A.: Using a simple game engine in teaching CS1: conference
workshop. In: J. Comput. Small Coll. 22 (2006), Nr. 1, S. 161–161. – ISSN 1937-4771
[Source Engine 2009] Source Engine: Source Engine Overview. 2009. – URL http:
//source.valvesoftware.com/. – [Online; Stand 18. September 2009]
[Statistisches Bundesamt 2009] Statistisches Bundesamt: Computer in der Freizeit von
jungen Männern bevorzugt. 2009. – URL http://www.destatis.de/jetspeed/portal/
cms/Sites/destatis/Internet/DE/Presse/pm/2004/06/PD04__261__ikt.psml. –
[Online; Stand 18. August 2009]
[Süddeutsche Zeitung 2009] Süddeutsche Zeitung: Ein Sport wie jeder andere? 2009.
– URL http://www.sueddeutsche.de/computer/24/420786/text/. – [Online; Stand
08. Oktober 2009]
[Taxén 2003] Taxén, Gustav: Teaching computer graphics constructively. In: SIGGRAPH
’03: ACM SIGGRAPH 2003 Educators Program. New York, NY, USA : ACM, 2003, S. 1–4
[Unreal Development Kit 2010] Unreal Development Kit: Unreal Development Kit.
2010. – URL http://www.udk.com/index.html. – [Online; Stand 04. Januar 2010]
[Unreal Technology 2009a]
Unreal Technology: Current technology - Unreal
Engine 3. 2009. – URL http://www.unrealtechnology.com/features.php?ref=
technology-overview. – [Online; Stand 18. September 2009]
[Unreal Technology 2009b] Unreal Technology: Licensing Terms. 2009. – URL
http://www.unrealtechnology.com/terms.php. – [Online; Stand 10. November 2009]
[Unreal Technology 2009c] Unreal Technology: Unreal Development Kit. 2009. –
URL http://www.unrealtechnology.com/development-kit.php. – [Online; Stand
11. Oktober 2009]
[Ware 2004] Ware, Colin: Information Visualization: Perception for Design. Morgan
Kaufmann, San Francisco, 2004
82
Abbildungsverzeichnis
2.1
2.2
2.3
2.4
2.5
Anwendungsgebiet virtuelle Realität / Simulation: Evakuierung eines Gebäudes
Anwendungsgebiet virtuelle Realität / Simulation: Mehrfachbildschirmdisplay
auf Basis von Unreal Tournament . . . . . . . . . . . . . . . . . . . . . . . .
Anwendungsgebiet Informationsvisualisierung: Quellcode verständlich machen.
Links sieht man die Darstellung einer Header-Datei und einer ImplementierungsDatei aus der Sprache C als dreidimensionale Objekte. Rechts sieht man die
textuelle Darstellung von Code. Beides unter der Verwendung der Quake 3
Engine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Anwendungsgebiet Gebäudevisualisierung: Darstellung eines Innenraums . . .
Anwendungsgebiet Medizin: Simuliertes chirurgisches Training mit einer Game
Engine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
17
18
19
20
21
3.1
3.2
Nutzwertanalyse: Das Zielsystem . . . . . . . . . . . . . . . . . . . . . . . . 24
Nutzwertanalyse: Zielerreichungsgrade . . . . . . . . . . . . . . . . . . . . . 27
4.1
4.2
OGRE: Der Szenengraph . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
OGRE: High Level Klassendiagramm von Root Objekt und Managern . . . . 46
5.1
Konzipiertes Klassendiagramm der Architektur . . . . . . . . . . . . . . . . . 57
6.1
6.2
6.3
6.4
6.5
6.6
6.7
6.8
Finales Klassendiagramm der Architektur der Anwendung . .
Die Szenengraphhierarchie der Anwendung . . . . . . . . . .
Lehre der Konzepte: Thematik der Levels (Level 1 bis Level 5
rechts) . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Lehre der Konzepte: Informationsfenster während des Spiels .
Lehre der Konzepte: Matrizenrechnung über das Matrixmenü
Lehre der Konzepte: Selbstständiges Texturieren . . . . . . .
Grafische Benutzeroberfläche: Das Hauptmenü . . . . . . . .
Kollisionserkennung: Axis Aligned Bounding Box . . . . . . .
. . . . .
. . . . .
von links
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . .
. . .
nach
. . .
. . .
. . .
. . .
. . .
. . .
.
.
.
.
.
.
66
67
68
70
71
73
A.1
A.2
A.3
A.4
Tutorial:
Tutorial:
Tutorial:
Tutorial:
.
.
.
.
.
.
.
.
.
.
.
.
98
99
99
100
Die Umgebungsvariable setzen
Ein neues Projekt einrichten . .
Das richtige Projekt auswählen
Das Projekt richtig einstellen .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. 60
. 63
83
Abbildungsverzeichnis
A.5
A.6
A.7
A.8
A.9
A.10
A.11
Tutorial:
Tutorial:
Tutorial:
Tutorial:
Tutorial:
Tutorial:
Tutorial:
Eine Quelldatei hinzufügen . . . . . . . .
Die Projekteinstellungen vornehmen . . .
Allgemeine Projekteinstellungen . . . . . .
Debugging Einstellungen . . . . . . . . .
Die Einstellungen der Programmiersprache
Die Linkereinstellungen vornehmen . . . .
Die Linkereinstellungen vornehmen . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
100
101
101
102
103
103
104
84
Tabellenverzeichnis
3.1
3.2
3.3
3.4
3.5
3.6
Kriterien für die Game Engines: Teilziel Community . . . . . . . . . . . . .
Kriterien für die Game Engines: Teilziel Technische Aspekte / Möglichkeiten
Kriterien für die Game Engines: Teilziel Erlernbarkeit . . . . . . . . . . . .
Ergebnisse der Nutzwertanalyse: Nutzwert Microsoft XNA . . . . . . . . .
Ergebnisse der Nutzwertanalyse: Nutzwert Irrlicht . . . . . . . . . . . . . .
Ergebnisse der Nutzwertanalyse: Nutzwert OGRE . . . . . . . . . . . . . .
.
.
.
.
.
.
24
25
26
32
33
34
A.1
A.2
A.3
A.4
A.5
A.6
A.7
Ergebnisse
Ergebnisse
Ergebnisse
Ergebnisse
Ergebnisse
Ergebnisse
Ergebnisse
.
.
.
.
.
.
.
93
94
94
95
95
96
96
der
der
der
der
der
der
der
Nutzwertanalyse:
Nutzwertanalyse:
Nutzwertanalyse:
Nutzwertanalyse:
Nutzwertanalyse:
Nutzwertanalyse:
Nutzwertanalyse:
Nutzwert
Nutzwert
Nutzwert
Nutzwert
Nutzwert
Nutzwert
Nutzwert
Panda3D . . . .
Horde3D . . . .
jMonkeyEngine
Crystal Space .
Axiom . . . . .
NeoAxis . . . .
Lightfeather . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
85
Algorithmenverzeichnis
6.1
6.2
6.3
6.4
Eine minimale OGRE Anwendung . . . . . . . . . . . .
Erstellung von Szenenmanager, Camera und Viewport .
Konfigurationsdatei des Spiels . . . . . . . . . . . . . .
Kollisionserkennung zwischen Spieler und Hindernissen
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
61
61
65
73
86
Glossar
Die Definitionen für die einzelnen Begriffe stammen von Wikipedia2 und aus dem Wiki von
OGRE3 .
Advergames (Werbespiele)
Advergames stellen Spiele dar, die in unterhaltsamer Form der Werbung dienen.
API
siehe Application Programming Interface
Application Programming Interface (Programmierschnittstelle)
Eine Programmierschnittstelle ist eine Schnittstelle, die von einem Softwaresystem anderen
Programmen zur Anbindung an das System zur Verfügung gestellt wird. Oft wird dafür die
Abkürzung API verwendet.
Backface Culling
Der Begriff Backface Culling bezeichnet eine Technik der 3D-Computergrafik, mit der ein
Großteil von nicht sichtbaren Dreiecken (oder allgemeiner: von Polygonen) einer Szene entfernt
wird. Hierdurch wird die Darstellungsgeschwindigkeit erhöht.
Bezier Patches
Bezier Patches sind eine Form von gekrümmten Oberflächen.
Bump Mapping
Hierbei handelt es sich um eine Technik zur Darstellung von extrem detailreichen Objekten, ohne die Geometriekomplexität des Objektes zu erhöhen, die vor allem in 3DVisualisierungsprogrammen zum Einsatz kommt. Der Trick dabei ist, dass die benötigten
Informationen in einer Textur gelagert werden, mit deren Hilfe Schattierungen auf eine
Oberfläche gezeichnet werden. Es ist somit nur eine Illusion, welche Oberflächenunebenheiten
simuliert, die in der Geometrie des Modells gar nicht vorhanden sind.
(Syn.: Reliefzuordnung)
2
3
http://wikipedia.de/
http://www.ogre3d.org/wiki/index.php/Main_Page
87
Glossar
Clipping
Als Clipping oder Abschneiden (englisch to clip = „abschneiden“, „kappen“) bezeichnet man
in der Computergrafik das Abschneiden von Grundobjekten am Rand eines gewünschten
Bildschirmausschnittes oder Fensters. Ein Fenster kann dabei ein beliebiges Polygon sein.
CLR
Siehe Common Language Runtime
Common Language Runtime
Die Common Language Runtime (CLR) ist die Laufzeitumgebung von .NET und stellt somit
den Interpreter für den standardisierten Zwischencode, der Common Intermediate Language
(CIL), dar.
Central Processing Unit
Der Hauptprozessor (engl. central processing unit, CPU), im allgemeinen Sprachgebrauch
oft auch nur als Prozessor bezeichnet, ist die zentrale Verarbeitungseinheit (ZVE) eines
Computers, die in der Lage ist, ein Programm auszuführen.
CPU
Siehe Central Processing Unit
Direct3D
Direct3D ist eine Programmierschnittstelle (API) von Microsoft für 3D-Computergrafik.
Direct3D ist ein Bestandteil von DirectX. Direct3D dient dazu, Windows-Anwendungen
einen möglichst direkten Zugriff auf die Hardware eines Computers zu geben. Häufig verwendet wird Direct3D vor allem für Computerspiele, bei dem es mit dem plattform- und
betriebssystemunabhängigen OpenGL konkurriert.
DirectX
DirectX ist eine Sammlung von COM-basierten Programmierschnittstellen für multimediaintensive Anwendungen (besonders Spiele) auf der Windows-Plattform und kommt auch auf
der Spielekonsole Xbox zum Einsatz.
Entity
Ein Entity ist eine Instanz der Klasse MovableObject von OGRE. Dies könnte ein Auto, eine
Person oder einen Hund darstellen. Ein Entity hat dabei keine fixe Position in der Welt und
basiert auf diskreten Polygonnetzen.
Environment Mapping
Environment Mapping ist eine effiziente Methode, um in der Computer Grafik spiegelnde
Oberflächen zu simulieren und zu rendern. Dabei wird die Umgebung des spiegelnden Objekts
als Textur gespeichert und auf die Oberfläche des Objekts abgebildet (mapping).
88
Glossar
(Syn.: Reflection Mapping)
E-Sport (elektronischer Sport)
Der Begriff E-Sport bezeichnet den Wettkampf im Austragen von Computerspielen im
Mehrspielermodus.
Grafik Engine
Eine Grafik Engine (wörtlich „Grafik-Maschine“, freier etwa: „Grafiktriebwerk“ oder „Grafikmodul“) ist ein mitunter eigenständiger Teil eines Computerprogramms oder einer ComputerHardware, welcher für dessen Darstellung von Computergrafik zuständig ist, meist möglichst
realitätsgetreuer 3D-Computergrafik, wie Gegenstände, Umwelt und Personen (Stichwort:
Virtuelle Realität). Im Zusammenhang mit 3D-Computergrafik bezeichnet man die Grafik
Engine daher dann auch als 3D-Engine.
Graphical User Interface (Grafische Benutzeroberfläche)
Eine grafische Benutzeroberfläche (engl. Graphical User Interface, Abk. GUI) ist eine SoftwareKomponente, die dem Benutzer eines Computers die Interaktion mit der Maschine über
grafische Symbole erlaubt. Die Darstellungen und Elemente (Arbeitsplatz, Symbole, Papierkorb,
Menü) können meist unter Verwendung eines Zeigegerätes wie einer Maus gesteuert werden.
(Syn.: grafische Benutzerschnittstelle)
GUI
Siehe Graphical User Interface
Heads-Up-Display
Das Head-Up-Display (HUD; sinngemäß: Anzeigefeld in Blickrichtung; Frontsichtdisplay) ist
ein Anzeigesystem, bei dem die für den Nutzer wichtigen Informationen in sein Sichtfeld
projiziert werden.
Heightmap (Höhenfeld)
Höhenfelder sind zweidimensionale skalare Felder, die ein Höhenrelief beschreiben. Jedem Ort
ist hier also ein Wert zugeordnet, der eine Position in der dritten räumlichen Dimension angibt,
eine Höhe. So können z. B. die Höhenreliefs von Landschaften und anderen Oberflächen als
Höhenfeld beschrieben werden.
High Dynamic Range Rendering
High Dynamic Range Rendering (HDRR) bezeichnet in der Computergrafik die Bildsynthese
(„Rendering“) unter Berücksichtigung der in der Natur vorkommenden großen Helligkeitsschwankungen. Im Gegensatz zu den herkömmlichen 256 Helligkeitsabstufungen pro Farbkanal
werden beim HDRR Farben intern mit ausreichend hoher Präzision repräsentiert, um einen sehr
großen Bereich von Helligkeiten abzudecken. Dies ermöglicht die Darstellung starker Kontraste
89
Glossar
ohne übermäßigen Detailverlust und die Anwendung von Effekten wie der Simulation von
Linsenstreuung.
HUD
siehe Heads-Up Display
Level of Detail
Mit Level of Detail (LOD) (deutsch: Detailstufen) bezeichnet man die verschiedenen Detailstufen bei der Darstellung virtueller Welten. Um die Geschwindigkeit von Anwendungen
der virtuellen Realität zu steigern, setzt man meist auf gleichzeitiges Nutzen von hoher
Detailgenauigkeit im Nahbereich und niedriger Detailstufe im Fernbereich.
Mesh (Polygonnetz)
Ein Polygonnetz (engl. Mesh) ist eine Sammlung von Vertices, Kanten und Seiten, die die
Form eines Polyeder-Objektes in der Computer Grafik definieren. Die Seiten bestehen für
gewöhnlich aus Dreiecken, Vierecken oder anderen simplen gewölbten bzw. ausgehöhlten
Polygonen. Ein Polyeder ist ein Teil des dreidimensionalen Raumes, der ausschließlich von
geraden Flächen begrenzt wird, wie beispielsweise ein Würfel.
Motion Blur (Bewegungsunschärfe)
Als Bewegungsunschärfe (engl. motion blur) bezeichnet man in der Fotografie eine auf Zonen
begrenzte Unschärfe in Bildern bewegter Objekte. In Computerspielen und Animationen (computergenerierten Filmen) wird Bewegungsunschärfe eingesetzt, um Bewegungen realistischer
zu machen.
OpenGL
OpenGL (Open Graphics Library) ist eine Spezifikation für eine plattform- und programmiersprachenunabhängige Programmierschnittstelle zur Entwicklung von 2D- und 3D-Computergrafik.
Der OpenGL-Standard beschreibt etwa 250 Befehle, die die Darstellung komplexer 3D-Szenen
in Echtzeit erlauben.
Phong Beleuchtungsmodell
Das Phong Beleuchtungsmodell ist ein Beleuchtungsmodell in der 3D-Computergrafik, das
dazu verwendet wird, die Beleuchtung von Objekten zu berechnen.
Portal Rendering
In Echtzeit Computer Grafik bezeichnet Portal Rendering einen Algorithmus für Sichtbarkeitsentscheid. In einer Spielszene gibt es möglicherweise viele Polygone, von denen zu einer
bestimmten Zeit nur ein paar sichtbar sind. Sichtbarkeitsentscheid hilft dem Renderer zu
entscheiden, welche sichtbar sind und welche nicht.
90
Glossar
Rendering Engine
Siehe Grafik Engine
Render to Texture
Im Kontext von OGRE bezeichnet Render to Texture eine Technik, bei der die dargestellten
Pixel auf eine Textur anstatt auf den Bildschirm gezeichnet werden.
Scene Node
Ein Scene Node in OGRE ist ein logisches Element in der Hierarchie des Szenengraphen,
welcher zur Organisation der Objekte in der Szene dient. Ein Scene Node kann mehrere
Kindknoten oder bewegliche Objekte haben (wie etwa Kameras, Lichter, Partikelsysteme
usw.).
Serious Game (digitales Lernspiel)
Der Begriff digitales Lernspiel (engl. Serious Game) bezieht sich auf Spiele, die in einer hardund softwarebasierten virtuellen Umgebung stattfinden und die erwünschtes Lernen anregen
wollen.
Shader
Shader, auch als Schattierer bezeichnet, sind Hardware- oder Softwaremodule, die bestimmte
Renderingeffekte bei der 3D-Computergrafik implementieren. Aus technischer Sicht bezeichnet
„Shader“ denjenigen Teil eines Renderers, der für die Ermittlung der Farbe eines Objektes
zuständig ist – im Gegensatz zu dem Teil, der die Sichtbarkeit des Objektes ermittelt. Shader
wurden ursprünglich für das Shading, also die Beleuchtungs-Berechnung, entwickelt, werden
aber mittlerweile auch für andere Dinge verwendet. Der Begriff „Shader“ wird sowohl für die
Hardware-Shader als auch für die darauf laufenden Programme selbst verwendet.
Shadow Mapping
Shadow Mapping ist eine Methode der Computergrafik, um Schattenwurf darzustellen. Beim
Shadow Mapping wird zunächst die sogenannte Shadow Map erzeugt. Diese ist eine aus
Sicht der Lichtquelle erzeugte Tiefenkarte, enthält also Informationen über den geringsten
Abstand von Objekten einer Szene zur Lichtquelle. Durch den Vergleich des Abstandes des
zu rendernden Objektes zur Lichtquelle und dem entsprechenden Punkt in der Shadow Map
kann der Schattenwurf berechnet werden.
Skybox
Eine Skybox ist ein Satz von sechs Bildern, die einen Würfel bilden, der hinter allem dargestellt
wird. Somit ist der Betrachter immerzu „im“ Würfel. Dies ist sinnvoll für die Erstellung der
Illusion von Himmeln und ähnlichem.
91
Glossar
Software Rendering
Software-Rendering bezeichnet die Methode der Grafikberechnung ohne spezialisierte Hardware, d. h. nur durch die CPU ohne Unterstützung durch eine Grafikkarte oder Vergleichbares.
Die Grafikkarte leitet dabei unbeteiligt die von der CPU berechneten Daten an den Monitor
weiter.
Standard Template Library
Als Standard Template Library (STL) werden verschiedene in der Programmiersprache C++
geschriebene Bibliotheken bezeichnet.
Texture Mapping
Der Begriff Texture Mapping (deutsch etwa Musterabbildung) bezeichnet ein Verfahren
der 3D-Computergrafik. Es dient dazu, die Flächen dreidimensionaler Oberflächenmodelle
mit zweidimensionalen Bildern – sogenannten „Texturen“ – und Oberflächeneigenschaften
auszustatten.
UML
Siehe Unified Modelling Language
Unified Modelling Language
Die Unified Modeling Language, kurz UML (auf deutsch „Vereinheitlichte Modellierungssprache“),
ist eine von der Object Management Group (OMG) entwickelte und standardisierte Sprache
für die Modellierung von Software und anderen Systemen.
Vertex / Vertices
Ein Vertex ist in der Geometrie eine Ecke eines Polygons.
Wrapper
Als Wrapper bezeichnet man in der Informationstechnik ein Stück Software, welches ein
anderes Stück Software umgibt. Dies kann sich sowohl auf ganze Programme, als auch nur
auf einzelne Programmteile bis Klassen beziehen. Die "Umhüllung" kann sowohl visueller
als auch technischer Natur sein. Wrapper werden aus unterschiedlichen Gründen eingesetzt,
zumeist sind das Kompatibilitäts-, Sicherheits- oder architektonische Gründe.
92
A Anhang
A.1 Tabellen der Nutzwerte untersuchter Engines
Panda3D
Kriterium
Erreichungsgrad
Nutzwert
1
3
42
2
3
36
3
3
27
4
3.5
24.5
5
3.5
35
6
3.5
28
7
4
24
8
4
48
9
2.5
25
10
3
36
Gesamt
325.5
Tab. A.1: Ergebnisse der Nutzwertanalyse: Nutzwert Panda3D
93
A Anhang
Horde3D
Kriterium
Erreichungsgrad
Nutzwert
1
3
42
2
2
24
3
3.5
31.5
4
3.5
24.5
5
3
30
6
3
24
7
3
18
8
2.5
30
9
1
10
10
2.5
30
Gesamt
264
Tab. A.2: Ergebnisse der Nutzwertanalyse: Nutzwert Horde3D
jMonkeEngine
Kriterium
Erreichungsgrad
Nutzwert
1
3.5
49
2
3.5
42
3
3
27
4
2
14
5
3.5
35
6
3.5
28
7
4
24
8
3
36
9
1
10
10
3
36
Gesamt
301
Tab. A.3: Ergebnisse der Nutzwertanalyse: Nutzwert jMonkeyEngine
94
A Anhang
Crystal Space
Kriterium
Erreichungsgrad
Nutzwert
1
2.5
35
2
2.5
30
3
3
27
4
3.5
24.5
5
3.5
35
6
3.5
28
7
4
24
8
2.5
30
9
2.5
25
10
3
36
Gesamt
294.5
Tab. A.4: Ergebnisse der Nutzwertanalyse: Nutzwert Crystal Space
Axiom
Kriterium
Erreichungsgrad
Nutzwert
1
2
28
2
2
24
3
3.5
31.5
4
3
21
5
3.5
35
6
3.5
28
7
4
24
8
3
36
9
1
10
10
3
36
Gesamt
273.5
Tab. A.5: Ergebnisse der Nutzwertanalyse: Nutzwert Axiom
95
A Anhang
NeoAxis
Kriterium
Erreichungsgrad
Nutzwert
1
2.5
35
2
2
24
3
3.5
31.5
4
3
21
5
4
40
6
3.5
28
7
3
18
8
2.5
30
9
1
10
10
3
36
Gesamt
273.5
Tab. A.6: Ergebnisse der Nutzwertanalyse: Nutzwert NeoAxis
Lightfeather
Kriterium
Erreichungsgrad
Nutzwert
1
2
28
2
2
24
3
3.5
31.5
4
3.5
24.5
5
4
40
6
3
24
7
3.5
21
8
3.5
42
9
2
20
10
2.5
30
Gesamt
285
Tab. A.7: Ergebnisse der Nutzwertanalyse: Nutzwert Lightfeather
A.2 Installation des Spiels
Das Spiel lässt sich leicht installieren. Das Spiel befindet sich in einer RAR-Datei, die
schlichtweg entpackt werden muss. Sollte es beim Spielstart zu Fehlermeldungen kommen
96
A Anhang
oder das Bild der Anwendung schwarz bleiben, hilft meist eine Installation der aktuellen Version
von DirectX1 , eine Aktualisierung der Grafikkartentreiber und die Installation des Nvidia
CG Toolkits2 . Das Spiel wird über die ausführbare Datei mit dem Namen „DodgeHead.exe“
gestartet, die sich im Hauptverzeichnis befindet.
A.3 Installation und Einrichtung des OGRE SDKs
Dieser Abschnitt behandelt die Installation des OGRE Software Development Kits auf einer
Windows Plattform (XP) mit Visual Studio. Hierbei kann entweder die kostenlose Express
Edition oder auch das Visual Studio verwendet werden.
Die entsprechenden Pakete zur Installation des SDKs findet man unter http://www.ogre3d.
org/download/sdk. Sollte OGRE auf einer anderen Plattform installiert werden, findet man
die entsprechenden Anleitungen im Wiki auf der Seite http://www.ogre3d.org/wiki/
index.php/Installing_An_SDK. Anschließend folgt man den Anweisungen der Installation.
Ist die Installation beendet, so kann man sich an die Konfiguration der Entwicklungsumgebung
wagen. Wird eine Version von Visual C++ verwendet, die aktueller als VC++ .NET 2003 ist,
so kann auch der OGRE Application Wizard verwendet werden. Weiterhin wurde die englische
Version von Visual Studio verwendet.
Die Anleitung zur Installation und Einrichtung des SDKs basiert auf Einträgen aus dem Wiki
der OGRE Internetpräsenz:
Das manuelle Erstellen einer Anwendung:
http://www.ogre3d.org/wiki/index.php/SettingUpAnApplication
Das Erstellen mit Hilfe des OGRE Application Wizards:
http://www.ogre3d.org/wiki/index.php/The_Complete_Blanks_Guide_To_Using_
The_OGRE_SDK_AppWizard
Die Installation des SDKs für Visual Studio:
http://www.ogre3d.org/wiki/index.php/Installing_the_Ogre_SDK_for_Visual_
C%2B%2B
1
2
http://www.microsoft.com/games/en-US/aboutGFW/pages/directx.aspx
http://developer.nvidia.com/object/cg_toolkit.html
97
A Anhang
A.3.1 Manuelle Erstellung
Umgebungsvariable
Eventuell muss man die Umgebungsvariable selbst einrichten. Diese Umgebungsvariable
zeigt dann immer auf den Installationsordner von OGRE. Damit kann man alle Pfade,
die man in der Entwicklungsumgebung einstellt, relativ zu diesem Pfad einstellen. Das
erleichtert beispielsweise die Arbeit, wenn man das Projekt auf mehreren Rechnern zum
Laufen bringen möchte. Wenn man das OGRE SDK runtergeladen hat, sollte automatisch eine
Umgebungsvariable angelegt worden sein. Existiert sie nicht, dann sollte man OGRE_HOME
manuell definieren. Wenn man den Quellcode runtergeladen hat, legt man am besten eine
neue Variable namens OGRE_SRC an, die auf den entsprechenden Ordner zeigt.
Man kann die Umgebungsvariable unter Windows XP anlegen, indem man einen Rechtsklick
auf „Arbeitsplatz“ macht, den Reiter „Erweitert“ auswählt und dort unter dem Punkt
„Umgebungsvariablen“ eine neue Variable „OGRE_HOME“ mit dem Pfad zum Ordner, das
das OGRE SDK beinhaltet, setzt.
Abb. A.1: Tutorial: Die Umgebungsvariable setzen
Ein Projekt anlegen
1. Man öffnet Visual C++ und erstellt ein neues Projekt.
98
A Anhang
Abb. A.2: Tutorial: Ein neues Projekt einrichten
2. Anschließend wählt man „Visual C++ / Win 32“ und dort den Unterpunkt „Win 32
Project“ aus. Anschließend gibt man einen Projektnamen und den Pfad zum Projekt
an.
Abb. A.3: Tutorial: Das richtige Projekt auswählen
3. Als Anwendungstyp wählt man „Windows Application“ und „empty Project“.
99
A Anhang
Abb. A.4: Tutorial: Das Projekt richtig einstellen
4. Nun fügt man eine neue Quelldatei zum Projekt hinzu. Dies ist wichtig, da sonst die
Projekteinstellungen nicht vorgenommen werden können.
Abb. A.5: Tutorial: Eine Quelldatei hinzufügen
Ein Projekt richtig konfigurieren
Wenn das Projekt den Namen „TutorialAnwendung“ trägt und man den Pfad beispielsweise auf „C:\Workspace“ setzt und den Haken für „Create directory for solution“ angek-
100
A Anhang
lickt hat und dort „TutorialSolution“ angibt, dann sieht die Struktur folgendermaßen aus:
„C:\Workspace\TutorialSolution\TutorialAnwendung“. Wenn man keinen Ordner für die Solution auswählt, ist die Struktur einfach „C:\Workspace\TutorialAnwendung“. Für gewöhnlich
müsste es mit der folgenden Konfiguration keine Probleme mit den DLLs geben. Die Einstellungen beziehen sich alle auf die Debug Konfiguration, für Release Konfiguration ersetzt
man die Pfade „Debug“ durch „Release“ und entfernt bei entsprechenden Bibliotheken das
„_d“ am Ende. Unter „Project Properties“ und „Configuration Properties“ nimmt man die
folgenden Einstellungen vor:
Abb. A.6: Tutorial: Die Projekteinstellungen vornehmen
1. Unter „Configuration Properties / General“ setzt man das Output Directory auf
„bin\$(ConfigurationName)“ und das Intermediate Directory auf „obj\$(ConfigurationName)“.
Abb. A.7: Tutorial: Allgemeine Projekteinstellungen
101
A Anhang
2. Unter Debugging fügt man bei Command „bin\$(ConfigurationName)\$(ProjectName).exe“
ein. Weiterhin fügt man unter Working Directory „bin\$(ConfigurationName)“ ein.
Im Gegensatz zum Tutorial im Internet wird in diesem Tutorial die Anwendung im
Verzeichnis ausgeführt, in dem sich auch das Visual Studio Projekt befindet. Auf der
Abbildung 8.8 kann man sehen, dass sich die Umgebungsvariable im Pfad befindet.
Diese sollte entfernt werden. Das verhindert, dass die kompilierte Anwendung in das
allgemeine OGRE SDK Verzeichnis verschoben wird und dort viele auszuführende
Dateien angelegt werden.
Abb. A.8: Tutorial: Debugging Einstellungen
3. Unter „C / C++“ fügt man unter Additional Include Directories „include; $(OGRE_HOME)\include;
$(OGRE_HOME)\samples\include“ ein.
102
A Anhang
Abb. A.9: Tutorial: Die Einstellungen der Programmiersprache
4. Jetzt fügt man unter „Linker / General“ unter Output File „$(OutDir)\$(ProjectName).exe“
und unter Additional Library Directories „$(OGRE_HOME)\lib“ ein.
Abb. A.10: Tutorial: Die Linkereinstellungen vornehmen
5. Abschließend fügt man unter „Linker / Input“ bei Additional Dependencies „OgreMain_d.lib OIS_d.lib“ ein. Möchte man heir die Release Einstellungen verwenden, lässt
man das „_d“ am Ende einfach weg.
103
A Anhang
Abb. A.11: Tutorial: Die Linkereinstellungen vornehmen
Nun ist das Projekt korrekt konfiguriert und die Entwicklung einer Anwendung mit dem
OGRE SDK kann beginnen. Zusätzlich müssen noch die DLLs aus dem Ordner „bin/release“ beziehungsweise „bin/debug“ in den entsprechenden Ordner des Projektverzeichnisses
verschoben werden.
Installation zusätzlicher Bibliotheken
Für die Entwicklung der Anwendung dieser Thesis wurden zusätzlich die Bibliotheken GLib
und Audiere verwendet. Hierfür legt man am besten einen Ordner unterhalb des OGRE
SDK Ordners namens „addons“ an und kopiert dorthin die jeweiligen Quelldateien, die für
die Entwicklung benötigt werden. Dann fügt man die jeweiligen Include Verzeichnisse wie
oben beim dritten Schritt beschrieben zur Konfiguration hinzu. Außerdem muss man die
Bibliotheken einbinden, wie beim vierten Schritt beschrieben. Hierfür gibt es meistens einen
Ordner namens „lib“, in dem sich die Bibliotheken befinden. Zur Verwendung der zusätzlichen
Bibliotheken müssen dann noch die jeweiligen DLL Dateien in den Ordner kopiert werden, in
dem die auszuführende Datei liegt.
Die Anwendung wurde für diese Arbeit entsprechend vorbereitet, es muss lediglich noch das
SDK von OGRE installiert und die Umgebungsvariable gesetzt werden. Anschließend kann
das Visual Studio Projekt geöffnet und verwendet werden.
104
A Anhang
A.3.2 Erstellung mit Hilfe des OGRE Application Wizards
Eine wesentlich einfachere Methode der Installation ist der OGRE Application Wizard. Dies ist
ein Assistent, der bei der Erstellung eines Projektes behilflich ist. Den OGRE Application Wizard findet man unter http://sourceforge.net/projects/ogreconglo/files/. Nach
dem Herunterladen navigiert man in den Ordner des Wizards und installiert ihn mit Hilfe eines
Doppelklicks auf die entsprechende .js-Datei. Den Ordner lässt man an der entsprechenden
Stelle bestehen.
Unter Windows Vista / Windows 7 benötigt man eine Eingabekonsole als Administrator.
Diese erhält man unter „Start Menü / Alle Programme / Zubehör“, dann macht man einen
Rechtsklick auf die Eingabekonsole und startet sie als Administrator.
Nun kann man die Entwicklungsumgebung starten und ein neues Projekt anlegen. Hier wählt
man als Template eine OGRE SDK Anwendung aus und gibt den entsprechenden Namen und
den Pfad des Projektes an. Anschließend entscheidet man sich für eine Standard Anwendung
und je nach Bedarf für ein eigenes Framework oder das Beispiel-Framework. Anschließend
beendet man den Assistenten. Nun kann mit der Entwicklung begonnen werden.
Sollte beim Kompilieren eine Zeile namens „SET_TERM_HANDLER“ Ärger machen, entfernt
man sie einfach. Diese Zeile ist in neueren Versionen nicht mehr nötig.
Der OGRE Application Wizard richtet lediglich OIS und CEGUI als zusätzliche Bibliotheken
ein. Im vorangegangenen Abschnitt wird die manuelle Installation zusätzlicher Bibliotheken
behandelt. Der Application Wizard richtet das Projekt außerdem so ein, dass nach dem
Kompilieren die Anwendung im bin-Ordner des OGRE SDKs gefunden wird und nicht im
Projektverzeichnis.
A.3.3 Fehlerquellen
Sollte es zu Fehlern bezüglich der DLLs kommen oder andere Probleme geben, erhählt man
Hilfe im Ogre Wiki unter dem Link http://www.ogre3d.org/wiki/index.php/BuildFAQ.
Zwei Probleme traten bei der Installation des SDKs in dieser Thesis auf. Zum einen das
Fehlen der „windows.h“, was mit der Installation des Windows SDKs3 behoben werden kann.
3
http://msdn.microsoft.com/de-de/windows/bb980924.aspx
105
A Anhang
Zum anderen fehlte eine DLL, die Direct3D betraf. Dieser Fehler wurde durch die Installation
der aktuellen DirectX Version behoben.
A.4 Fragebogen
1. Gab es Probleme beim Spielstart? Wenn ja, wie lautet der Fehler?
2. Hat Ihnen das Spiel Spaß gemacht?
JA | NEIN
3. Wie gefällt Ihnen die Spielidee?
4. Halten Sie es für sinnvoll, Computer Grafik spielerisch erlernbar zu machen?
JA | NEIN
5. Lässt sich das Spiel gut bedienen / steuern?
JA | NEIN
6. Wenn bei Frage 4 „NEIN“ angekreuzt wurde, schreiben Sie hier bitte, warum es
sich nicht gut steuern / bedienen lässt
7. Ist das Spielziel ersichtlich? Wenn nein, warum nicht?
8. Sind Ihnen Fehler im Spielablauf aufgefallen? Wenn ja, welche?
9. War das Spiel zu schwer oder zu leicht? Wenn eines von beiden zutrifft, erklären
Sie bitte warum?
10. Sollte die Interaktion im Spiel noch gesteigert werden?
JA | NEIN
11. Was könnte Ihrer Meinung nach noch verbessert werden?
12. Hat Ihnen das Spiel in irgendeiner Weise geholfen, die Konzepte der Computer
Graphik zu verstehen? Wenn ja, wie?
13. Welche Bereiche der Computer Grafik haben Ihnen im Unterricht persönlich Probleme bereitet bzw. waren schwer verständlich und sollten im Spiel näher behandelt
werden?
14. Haben Sie weitere Ideen, wie man die Konzepte der Computer Grafik spielerisch
erlernbar machen könnte?
15. Sonstige Anregungen oder Kritik zum Spiel
106
A Anhang
Bereits bestehende weitere Ideen
Bisher weiter angedachte Ideen wären Quizfragen innerhalb des Spiels, wenn man bestimmte
Kugeln aufsammelt oder am Ende eines Levels.
Vielen Dank für das Ausfüllen des Fragebogens!
107
Selbständigkeitserklärung
Ich versichere, dass ich diese Bachelor Thesis selbstständig verfasst, keine anderen als die
angegebenen Quellen und Hilfsmittel benutzt sowie alle wörtlich oder sinngemäß übernommenen Stellen in der Arbeit gekennzeichnet habe. Die Arbeit wurde noch keiner Kommission zur
Prüfung vorgelegt und verletzt in keiner Weise Rechte Dritter.
Reutlingen, den 18.01.2010
Dennis Schneider
108