Ogre Universität zu Köln Historisch-Kulturwissenschaftliche Informationsverarbeitung Softwaretechnologie II (Teil 2): Simulation und 3D Programmierung Dozent: Prof. Dr. Manfred Thaller Referent: Thomas Kleinke Sommersemester 2012
Überblick 1. Grundsätzliches 2. Die Kernbestandteile von Ogre 3. Weitere Features 4. Installation von Ogre Ogre
Grundsätzliches Ogre = Object-Oriented Graphics Rendering Engine Reine Grafikengine, keine komplette Spieleengine (anders als Tribase) Vorteil: Bibliotheken können je nach Anforderungen frei zusammengestellt werden Nachteil: Größerer Aufwand, kein sofort einsatzfähiges Komplettpaket zur Spieleentwicklung In manchen Bereichen sind speziell auf die Verwendung mit Ogre abgestimmte Bibliotheken vorhanden, z. B.: OIS: Eingabesystem, wird mit Ogre mitgeliefert CEGUI: Integration von GUIs Grundsätzliches
Grundsätzliches Geschrieben in C++, Quellcode einsehbar und erweiterbar (Open Source, MIT-Lizenz) Unterstützte Systeme: Windows, Linux, Mac OS X, ios (iphone) Unterstützte Rendersysteme: Direct3D und OpenGL Bekannte Spiele, die Ogre verwenden: Ankh The Book of Unwritten Tales Torchlight Ständige Weiterentwicklung (aktuelle Version: 1.7.4), große Community, gut dokumentiert Grundsätzliches
Die Kernbestandteile von Ogre Die Kernbestandteile von Ogre
Das root-objekt Ogre-Basiselement: wird bei Programmstart erstellt und bei Programmende gelöscht Enthält Methoden zur Erstellung anderer Ogre-Objekte (z. B. SceneManager, RenderWindow) Ermöglicht Konfiguration des Systems (Auflösung, Farbtiefe etc.) durch den Benutzer über ein Optionsmenü Die Kernbestandteile von Ogre
SceneManager Verwaltet die Bestandteile der zu rendernden Szene und leitet die Szene ans RenderSystem weiter Grundprinzip: Szenengraph mit hierarchischen Strukturen Jede Szene wird zunächst einmalig mit allen Bestandteilen definiert und kann später modifiziert werden (bei Verwendung eines FrameListeners in jedem Frame; analog zu den move/render-funktionen der Tribase-Engine) Unterschiedliche SceneManager-Typen verfügbar (z.b. für Terrains, Innenräume etc.), über Plugins können weitere eingebunden werden Die Kernbestandteile von Ogre
Bestandteile einer Szene Eine Szene kann aus folgenden Elementen bestehen: Entities: bewegliche Objekte, dargestellt durch ein Mesh Cameras: bestimmen, von welchem Blickpunkt aus die Szene dargestellt wird Lights: beleuchten die Szene (mehrere Typen verfügbar) Static Geometry: unbeweglicher Teil einer Szene Eine Entity wird immer einer SceneNode zugewiesen, die die Position und Ausrichtung des Objekts speichert SceneNodes können weitere SceneNodes als Kindelemente beinhalten: Manipulationen (z. B. Translation, Rotation) wirken sich immer auch auf alle Unterknoten aus Die Kernbestandteile von Ogre
Beispiel Ogre::Entity* ballentity; ballentity = scenemanager->createentity("ball_entity", "ball.mesh"); ballentity->setcastshadows(true); Ogre::SceneNode* ballnode; ballnode = scenemanager->getrootscenenode()->createchildscenenode ("Ball_Node"); ballnode->attachobject(ballentity); ballnode->translate(0, 4.5, 0); Die Kernbestandteile von Ogre
Ressourcen Zu den Ressourcen zählen u.a. Meshes, Texturen und Schriftarten Für jeden Ressourcentyp gibt es einen eigenen Manager (TextureManager, MeshManager etc.), der mehrfaches Laden einer Ressource sowie Speicherlecks verhindert Ressourcen können mit dem ResourceGroupManager in Gruppen aufgeteilt werden; so können später nur die Ressourcen der gerade benötigten Gruppe geladen werden Verzeichnisse, in denen sich Ressourcen befinden, können in einer Konfigurationsdatei aufgelistet werden Die Kernbestandteile von Ogre
Materialien Materialien bestimmen die Eigenschaften, mit denen ein Objekt gerendert wird ( Effekte in der Tribase-Engine): Farbe, Texturierung, Cullmode, Texturfilterung... Materialinformationen können in eigenen Dateien (.material) gespeichert, aber auch im Code selbst verändert werden Vertex- und Pixelshader werden unterstützt: entweder Einbindung in Materialdateien oder Auslagerung in eigene Dateien (.program) Modell-Exporter erzeugen beim Exportieren neben.meshdateien meist auch.material-dateien Die Kernbestandteile von Ogre
Weitere Features Einfaches Rendern von Skyboxes, Skydomes und Skyplanes: scenemanager->setskybox(true, "SpaceSkyBox"); Erstellung von Terrains mit dem Ogre Terrain System Weitere Features
Nebel und Schatten Nebel (exponentiell oder linear): scenemanager->setfog(ogre::fog_linear, fogcolour, 0.0, 50, 500); Einfache Möglichkeit der Schattenerzeugung (Schattentexturen oder Stencil Shadows) Weitere Features
Partikeleffekte Definition von Partikelsystemen (zur Darstellung von Rauch, Feuer, Nebel, Magie etc.) in eigenen Skriptdateien (.particle) particle_system Examples/PurpleFountain { material Examples/Flare2 particle_width 20 particle_height 20 cull_each false quota 10000 billboard_type oriented_self... } Weitere Features // Area emitter emitter Point { angle 15 emission_rate 75 time_to_live 3 direction 0 1 0 velocity_min 250 velocity_max 300 colour_range_start 1 0 0 colour_range_end 0 0 1 }
Overlays Overlays: Zeichnen von Objekten über die gerenderte Szene 2D: Anzeigen (z.b. Lebensenergie), Minimap etc. 3D: z.b. Raumschiff- / Flugzeugcockpit Weniger geeignet für interaktive Elemente (GUIs) Weitere Features
Animation Skeletal Animation: Ausrichtung von Vertices anhand von Bones Animieren im Modeler, anschließend Export Skelettdaten befinden sich in eigenen Dateien (.skeleton) Einfaches Abspielen der Animationen per Funktionsaufruf Weitere Features
Animation Vertex Animation: Position der Vertices wird jeweils gespeichert, Übergang zwischen zwei Standbildern Daten befinden sich in den.mesh-dateien Vermischen mehrerer gespeicherter Positionen möglich (z.b. Gesichtsanimation) SceneNode Animation: Automatisches Bewegen von SceneNodes anhand vorgegebener Bahnen (z.b. zur Umsetzung von Kamerafahrten) Weitere Features
Installation von Ogre Zwei grundsätzliche Möglichkeiten: 1. Download des SDKs 2. Download und Kompilierung des aktuellen Codes Include-Verzeichnisse und Bibliotheksdateien in den Projekteigenschaften angeben Benötigte Ogre-Header im Code einbinden: #include <OgreRoot.h> #include <OgreFrameListener.h> #include <OgreCamera.h>... Installation von Ogre
Nützliche Links http://www.ogre3d.org/download Download von SDK, Sourcecode und Tools (z.b. Exportern) http://www.ogre3d.org/docs/manual/ Einführung in die grundlegenden Konzepte von Ogre http://www.ogre3d.org/tikiwiki/ Ogre-Wiki inklusive Tutorials, Installationsanleitungen u.v.m. http://www.ogre3d.org/docs/api/html/ API-Referenz mit Informationen zu allen Klassen
Ende Dankeschön fürs Zuhören!