Openscenegraph

From Fontys VR-Wiki
Jump to: navigation, search

OpenScenegraphis een open sourch 3D graphics toolkit. OpenSceneGraph i.c.m. de exporter voor 3Ds MAX biedt interessante mogelijkheden voor de visualisatie van architectuur en stedenbouw in de Cave. Hieronder wordt toegelicht hoe het inladen van modellen met animaties vanuit 3D studie MAX in een OpenSceneGraph applicatie werkt.


3Dstudio Max modellen

Voor het inladen van modellen met animaties in OSG zijn een aantal standaard functies beschikbaar.

De volgende functie kan de meeste soort modellen inladen.

// Load an external model and store it as a osg::Node osg::ref_ptr<osg::Node> loadedModel = osgDB::readNodeFile("test.OSG");


Hiermee kunnen dus ook modellen worden ingeladen die voorzien zijn van een animatie.

Maar helaas kan deze functie wel veel modellen inladen maar dit zijn voornamelijk statische modellen. Om ook de animaties correct te kunnen inladen moet het model naar een OSG formaat worden omgezet.

Dit kan worden gedaan met een tool die kan worden gedownload van de OSG website.

Deze tool is in ontwikkeling en de laatste versie is van feb 2009

Download versie 0.9.5

Deze tool kan daarna eenvoudig worden geïnstalleerd volgens een eenvoudig GUI.

Hierbij moet worden aangegeven voor welke versie van 3D studio MAX de tool geïnstalleerd moet worden. Maar de installatie procedure detecteert zelf welke versie geïnstalleerd staan.

Let op de screenshots zijn van 0.9.3!

Osg1.jpg

Nu kan er in 3D studio MAX een model gemaakt worden met animaties textures etc.

Voor de mogelijkheden kijk op de volgende link:

HOWTO LET OP oudere versie.

Het exporteren van dit model is mogelijk door “export” --> Save as type: “OpenSceneGraph Exporter” te kiezen.

Osg2.jpg

Wanneer er op “Save” wordt gedrukt komt het volgende scherm zichtbaar.

Osg3.jpg

Hierbij zijn een heleboel mogelijkheden deze kunnen worden aangepast maar dit zal meestal niet nodig zijn.

De volgende applicatie zal de geëxporteerde animatie afspelen.

  1. include <iostream>
  2. include <osgDB/ReadFile> // Needed to read a file
  3. include <osgUtil/Optimizer>
  4. include <osgProducer/Viewer>

int main (int argc, char* argv[]) { // Create a Producer-based viewer with standard settings osgProducer::Viewer viewer; viewer.setUpViewer(osgProducer::Viewer::STANDARD_SETTINGS);

// Load an external model and store it as a osg::Node osg::ref_ptr<osg::Node> loadedModel = osgDB::readNodeFile("test.OSG");

// If loading fails... if (!loadedModel) { std::cerr << "Problem opening model!\n"; exit (1); }

// Set the loaded model as the scene data for the viewer viewer.setSceneData (loadedModel.get());


// Enter rendering loop viewer.realize();

while (!viewer.done()) { // wait for all cull and draw threads to complete. viewer.sync();

// update the scene by traversing it with the the update visitor // which will call all node update callbacks and animations. viewer.update();

// fire off the cull and draw traversals of the scene. viewer.frame(); }

// Wait for all cull and draw threads to complete before exit. viewer.sync(); }

De animatie worde nu achter elkaar afgespeeld in een loop het is met behulp van de functies die in OSG zitten mogelijk om door de geexporteerde SceneGraph te lopen dan is het mogelijk om de appartie animaties af te spelen.


TOEVOEGEN DOCUMENT GIJS!!!