Ergebnis 1 bis 2 von 2

Thema: Projektvorstellung: 3D Leveleditor

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1

    Projektvorstellung: 3D Leveleditor

    Servus, dachte mir ich stelle hier einmal das Schulprojekt, an dem ich derzeit arbeite vor.

    Das Schulprojekt besteht aus einem 3D Leveleditor und einer Engine, die das was der Editor ausspuckt als Spiel präsentieren soll.
    Die Gruppe die an dem Projekt arbeitet besteht aus 4 Personen, von denen die anderen drei für Sounds, die Engine, und das modellieren zuständig sind,
    meine Aufgabe ist das programmieren des Editors.
    Programmiert wird das ganze in C++ mithilfe von
    Ogre3D - 3D Renderer
    CEGUI - GUISystem
    nxOgre - Wrapper für die Physikengine PhysX.
    TinyXML - Zum laden und speichern von XML Dateien
    Squirrel - wird später für die Scripte verwendet.

    Runtergeladen werden kann der derzeitige Stand hier:
    http://www.megaupload.com/?d=IAVBQD2O
    Allerdings nur die executable. Der Source Code wird nach Abgabe des Projektes freigestellt.
    Ich hoffe, dass die PhysX PPU Treiber nicht zum Ausführen benötigt werden.

    Nach erstellen eines neuen Projektes(speichern und laden sind noch in arbeit ) sieht das ganze einmal so aus:

    Der Benutzer bekommt eine leere Szene mit einem standard Terrain vorgesetzt. Die Werkzeuge zum Arbeiten sind in vorerst zusammengeklappten Fenstern oben nebeneinander aufgereiht und können durch doppelklicken aufgeklappt werden.

    Hier wurde im Fenster "Terrain" eine externe Config File für das Gelände geladen und ein paar Optionen verändert. Alle Einstellungen aus der Config Datei könnten auch hier verändert werden.
    Um ein Terrain zu rendern wird zuerst einmal eine 2^n+1 Pixel große HeightMap(graustufenbild) benötigt. Aus der x/y Position des Pixels ergibt sich die x/z Position eines Vertizes des Terrains wobei x wie gewohnt von links nach rechts am Bildschirm entlangwandert und z die Tiefe, also die Achse vom Betrachter zum Bildschirm ist. Die Höhe y des Vertizes wird durch die Helligkeit des Pixels bestimmt. Die World Texture ist eine Textur, die gestreckt über das gesamte Terrain gelegt wird. Die Textur kann als Lightmap für die Schatten und zum definieren der Farben der Umgebung verwendet werden. Die Detail texture sorgt dann für Struktur. Es wird aber bald die Möglichkeit geben, eigene Ogre-Materialien anstatt World und Detail texture zu verwenden.

    Environment Paint ermöglicht es , Objekte in die Szene einzufügen. Dazu wählt man einfach das gewünschet Objekt, klickt auf "Paint" und klickt dann auf die Stellen im terrain, an denen man das Objekt einfügen möchte.
    Offsett und rotation sind noch in arbeit.


    Neben dem Environment Paint besteht auch die Möglichkeit mit Billboard Paint Billboards in die Szene einzufügen. Billboards sind Vierecke, mit einer Textur drauf. Der Vorteil an ihnen ist, dass sie sich selbst in sehr großer Anzahl schnell rendern lassen. Die Billboards hier drehen sich immer mit der Kamera mit, wodurch sich ganz gut gras vortäuschen lässt. Die Funktion ist allerdings im moment eher zu Test/Demonstrationszwecken drinnen. Da fehlt noch eine ganze Menge. Um sie zu benutzen wählt "DefaultBillboardSet" aus der Liste und klickt auf Paint. Derzeit haben alle Billboards die eingefügt werden dieselbe größe und dasselbe Material.


    Wenn man ganze Szenen importieren möchte, kann man diese in 3ds max mit dem Ofusion Plugin als OSM Datei exportieren und im Editor einfügen. Neben OSM Dateien werden bald auch *.scene Dateien importiert werden können. Vorteil dabei ist, dass es für das *.scene Format auch Exporter für maya, blender und soweit ich weiß auch xsi gibt. Sowohl *.OSM als auch *.scene sind Szenendefinitionen im XML Format.


    Die Physikengine PhysX, verwendet über den Wrapper nxOgre, wird im Leveleditor deswegen schon gebraucht, weil durch sie herausgefunden werden kann, auf welches Objekt und an welche Stelle des Objekts geklickt wurde. Das ganze funktioniert über Rays, die von einem Ausgangspunkt aus in eine bestimmte Richtung einen Strahl mit bestimmter Länge "schießen". PhysX berechnet dann, welche Objekte der Strahl geschnitten hat und an welcher Stelle er sie geschnitten hat. An sich hätte auch Ogre diese Funktion, allerdings berechnet Ogre das ganze nur an den BoundingBoxen der Objekte.

    Als nächstes wird ein EventEditor eingefügt, der ein bisschen Leben in das ganze bringen soll. Events sind Objekte, die über ein Aussehen(Ogre: SceneNode, scale, orientation, position), physikalische Eigenschaften (PhysX: Body, mass, angularDamping, collisionShape) und Scripte die sie ausführen(Squirrelscripte).

    Geändert von nudelsalat (07.02.2007 um 21:40 Uhr)

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •