Inhalt -Einleitung -Installieren und Einrichten von Ogre -Die erste Anwendung Ogre Einführung Teil 1 Einleitung Eine 3D Engine ist eine sehr komplexe Software und besteht aus mehreren tausend Zeilen Programmcode. Das Ziel dieser Reihe ist es dem Leser das Arbeiten mit der 3D Engine Ogre näher zu bringen, dabei werden wir damit anfangen, woher man die Engine bekommt, diese installiert und seine IDE, in diesem Fall Visual Studio 2005, entsprechend einzurichten. Zum Abschluss schreiben wir ein Programm, das Ogre benutzt, um ein Fenster zu öffnen. Am Anfang wird einem alles etwas seltsam und umständlich vorkommen, dies wird sich aber im Verlauf der Reihe klären, nachdem man in die Tiefen von Ogre eingetaucht ist. Zum Verständnis dieser Reihe sind Grundkenntnisse in C++ notwendig und es sollte auch schon etwas Erfahrung in C++ vorhanden sein. Ist dies nicht der Fall, sollte auf jeden Fall vorher das fehlende Wissen erarbeitet werden. Installieren und Einrichten von Ogre Bevor wir mit Ogre entwickeln können benötigen wir erst mal das aktuelle Ogre SDK. Zu finden ist dieses auf der Downloadseite von Ogre 1. Nachdem das SDK runtergeladen ist, sollte der Installer ausgeführt werden. Ist dies vollbracht, muss noch die Entwicklungsumgebung angepasst werden und schon kann es losgehen. Ich verwende Microsoft Visual Studio 8.0, soll eine andere Entwicklungsumgebung verwendet werden findet man im Wiki von Ogre 2 die passende Beschreibung zum Einstellen seiner Entwicklungsumgebung. Als Erstes muss Visual Studio gestartet werden, danach öffnet man in der Menüleiste den Dialog Tools und dort klickt man auf den Menüpunkt Optionen. 1 http://ogre.org/index.php?option=com_remository&itemid=57&func=selectcat&cat=1 2 http://www.ogre.org/wiki/index.php/settingupanapplication
Es sollte sich folgendes Fenster öffnen Dann wählt man im Punkt Projekte und Projektmappen den Unterpunkt VC++ Directories Danach wählt man im Scrolldown Menü Show directories for: den Punkt Include files
Dort fügt man nun die folgende 2 Pfade ein: - Pfad zum OgreSDK\include - Pfad zum OgreSDK\samples\include Ist dies erledigt, wechselt man zum Punkt Libary files im Scrolldown Menu Show directories for: Dort fügt man folgende Pfad ein Pfad zum OgreSDK\lib Danach bestätig man den Optionen Dialog mit Ok. Jetzt ist VisualStudio fertig eingerichtet und man kann mit seiner ersten Ogre Anwendung beginnen. Die erste Anwendung Bevor wir unser erstes Ogreprojekt erstellen, sollten wir uns Gedanken über eine sinnvolle
Ordnerstruktur machen. Am einfachsten wäre es für den späteren Verlauf, einen Ordner mit dem Name "OgreTutorial" zu erstellen und in diesem wiederum einen Ordner "OgreEinführung". In diesen Ordner werden dann die Projekte der einzelnen Teile gespeichert, jeweils in einen eigenen Ordner, dieser wird normalerweise von Visual Studio erstellt. Natürlich könnt ihr auch eine andere Struktur wählen, dann müsst ihr nachher einfach die Pfade in einer Configfile entsprechend eurer Ordnerstruktur anpassen. Nun muss noch der Ordner "media", welcher im Verzeichnis vom Ogre SDK zu finden ist, in unseren Ordern "OgreTutorial" kopiert werden. Dies ist notwendig, da wir nachher auf Texturen und Modelle in diesem Ordner zurückgreifen werden. Um überhaupt anfangen zu können braucht man wie bei jeder anderen Anwendung, die man in Visual Studio schreibt, ein Projekt. Für Ogre sollte man ein Konsolenprojekt erstellen und keine vorkompilierten Headerfiles benutzten, am besten einfach ein leeres Projekt erstellen. Ist das Projekt erst einmal erstellt, müssen noch ein paar Kleinigkeiten eingestellt werden, bevor man mit dem Entwickeln anfangen kann. Zuerst muss RTTI aktiviert werden. Dies geschieht, indem man die Projekteigenschaft öffnet, in der Menüleist auf "Projekt" und dann auf "Projektname- Eigenschaften"klickt. Ansch sollte sich das Eigenschaftsfenster des Projektes öffnen, dort kann man unter dem Punkt "Konfigurationseigenschaften" im Unterpunkt "C++" das Register "Language" öffnen. Dort gibt es einen Punkt mit dem Namen "Enable Run Time Type-Info", dieser muss auf "yes" gesetzt sein, damit Ogre funktioniert.
Desweiteren muss im gleichem Unterpunkt die Registerkarte "Code Generation" geöffnet und der Punkt "Runtime Libary" auf "Multi-thread Debug Dll" gestellt werden.
Der letzte Schritt ist nun im Unterpunkt "Linker" die Registerkarte "Input" zu öffnen und im Punkt "Additional Dependencies" OgreMain_d.lib einzutragen. Ist dies alles vollbracht können wir endlich anfangen den Code zu schreiben, natürlich nachdem wir eine.cpp Datei erstellt haben. Der erste Schritt zu unserer Ogre-Anwendung ist die benötigten Headerfiles einzubinden. Da es sich noch um eine sehr einfache Anwendung handelt brauchen wir nur zwei Header, Windows.h und ExampleApplication.h. Windows.h sollte bekannt sein, daher gehe ich gleich auf ExampleApplication.h ein. Normalerweise ist es etwas Arbeit, Ogre zum Laufen zu bringen. Man muss einige Klassen erstellen, Plugins laden etc. Damit Entwickler, die sich noch nicht so gut in Ogre auskennen, damit nicht auseinandersetzen müssen, wird ein kleines Framework mitgeliefert, das diese Aufgaben übernimmt. Später werden wir sehen, wie man auch ohne dieses Framework arbeiten kann. Aber für den Augenblick sind wir dankbar, das es existiert und benutzten es. Es ermöglicht uns gleich mit dem spannenden Teil loszulegen und nicht erst Alles initialisieren zu müssen. Hier nun endlich die ersten beiden Codezeilen #include <windows.h> #include <ExampleApplication.h> Nun kommt ExampleApplication.h zum Tragen. Wir erstellen eine neue Klasse CApp, die von der Klasse ExampleApplication erbt. Diese Klasse sorgt, wie oben schon erwähnt dafür, dass Ogre gestartet und alle nötigen Plugins, Ressourcen etc. geladen werden. Außerdem sorgt sie dafür das wir eine Kamera haben, auf Tastatureingaben reagieren können und noch einiges mehr. Und das Fantastische ist, dass ein Großteil ihrer Funktionen virtual ist, sodass wir sie überschreiben können falls wir das Verhalten unserer Anwendungen ändern wollen, dies werden wir später auch noch tun. Erst mal reicht es uns, die createscene()-funktion zu überschreiben, da diese pure virtual ist und somit überschrieben werden muss. Da wir noch keine Szene haben, die wir anzeigen wollen, bleibt diese Funktion erst mal leer. So sieht das ganze dann in Code aus.
//Unser Ogre Anwendung, erbt von ExampleApplication einige nützliche Funktionen class CApp : public ExampleApplication public: //ExampleApplication verlangt von uns diese Funktion zu überschreiben. //Im nächsten Abschnitt werden wir diese auch mit Leben füllen, jetzt bliebt sie erstmal leer void createscene() }; } Nachdem die Klasse für unsere Anwendung fertig ist, fehlt jetzt nur noch die Mainfunktion. Der erste Schritt in unserer Mainfunktion ist das Erstellen einer Instanz unserer Klasse. //Mainfunktion int main(void) //Instanz unserer Klasse erstellen CApp App; Danach müssen wir die go()-funktion unserer Klasse aufrufen. Diese Funktion kommt auch von ExampleApplication und sorgt dafür, das Ogre gestartet wird und die Szene nach unserer Beschreibung in der createscene()-funktion erstellt wird. Da bei diesem Vorgang einige Fehler auftreten können und in diesem Fall Ogre eine Exception ausgibt, sollte der Funktionsaufruf in einem try-block stattfinden. try App.go(); } Was jetzt noch fehlt ist der für den try-block zuständige catch-block, dieser wird nichts anderes machen, als die Fehlermeldung von Ogre entgegenzunehmen und in einer MessageBox auszugeben und das Programm mit dem Rückgabewert 1 (Fehler) zu beenden. catch (Ogre::Exception& e) MessageBoxA(NULL, e.getfulldescription().c_str(), "Ein Fehler ist aufgetreten", MB_OK ); return 1;//Es ist ein Fehler aufgetreten } Zu guter Letzt muss nur noch 0 zurückgegeben werden, wenn alles gut gegangen ist und die Mainfunktionen geschlossen werden. return 0;//Alles lief wie geplant }//Ende der Mainfunktion Jetzt Kompilieren und Starten wir das Programm, es sollte eine Fehlermeldung über das Fehlen von Dlls kommen. Um dieses Problem zu beheben, kopieren wir alle Dlls und alle Configfiles.cfg Files aus dem "Pfad zum OgreSDK/bin/debug" Ordner in unseren Projektordner. Hat man eine Ordnerstruktur wie oben beschrieben, ist keine weiter Arbeit mehr nötig, ansonsten muss man die Pfade in der "resources.cfg" entsprechend seiner Ordnerstruktur anpassen. Wenn man sich die Pfade in der "resources.cfg" anschaut, wird man feststellen, dass die oben beschriebene Ordnerstruktur genau so gewählt ist, dass keine Anpassungen mehr nötig sind. Sie müssen immer darauf achten, dass der Ordner "media" für unser Programm entsprechend der "resources.cfg"-file vorhanden ist,
sonst gibt Ogre eine Fehlermeldung aus, da es für Ogre dann nicht möglich ist die angegebenen Dateien zu laden. Anschließend kann das Programm gestartet werden. Zuerst wird sich die Konsole öffnen und einige Zeilen Text sollten erscheinen, dies kann man einfach ignorieren, da sich kurz danach ein Configfdialog öffnet, der etwa so aussehen sollte.
Ist alles so eingestellt, wie gewünscht, klickt man auf "OK" und es sollte sich dieses Fenster öffnen Verlassen kann man die Anwendung durch Drücken der Escapetaste. Zur Zeit ist noch alles schwarz, da unsere createscene()-funktion noch leer ist, das werden wir im nächsten Teil ändern. Ausblick Im nächsten Teil beschäftigen wir uns mit den Grundlagen eines Szenegraphen und lernen den Szenegraphen von Ogre kennen. Außerdem werden wir unser erste 3D Objekt laden und in der Szene platzieren, dazu noch skalieren und rotieren. Es bleibt also spannend.