Open Inventor Open Inventor e un object oriented 3D toolkit cioè una libreria di oggetti e metodi per la creazione di applicazioni grafiche interattive tridimensionali. Il toolkit mette a disposizione oggetti che possono essere composti modificati ed estesi per creare delle scene grafiche interattive. Da dove si scarica? Open Source: http://www.studierstube.org/openinventor/ TGS (Open Inventor 3.1.1) versione demo per 15 giorni: ftp://ftp.tgs.com/OpenInventor/Windows/Inv311/ Dove si studia? Libro ufficiale: The Inventor Mentor – Ed.: Addison-Wesley Manuale di Riferimento nella cartella: C:\TGS\OIV3.1.1\doc\ReferenceManual Esempi nella cartella: C:\TGS\OIV3.1.1\src\Inventor\examples\Mentor\Cxx Dispense e lucidi sul sito Il grafo della Scena (Scene Graph) Uno scene graph è costituito da uno o più nodi, ognuno dei quali rappresenta un oggetto primitivo una proprietà o un gruppo di nodi. La gerarchia della scena è creata addizionando ai nodi gruppo degli altri nodi. #include <Inventor/Xt/SoXt.h> #include <Inventor/Xt/SoXtRenderArea.h> … int main(int, char **argv) { Widget myWindow = SoXt::init(argv[0]); if (myWindow == NULL) return 1; Primo Esempio Widget myWindow = SoXt::init(argv[0]); Inizializzazione di Open Inventor SoSeparator *root = new SoSeparator; SoSeparator *root = new SoSeparator; SoPerspectiveCamera *myCamera = new SoPerspectiveCamera; SoPerspectiveCamera SoMaterial *myMaterial = new SoMaterial; radice della gerarchia di=oggetti è SoMaterial *myMaterial new SoMaterial; I nodi di Open InventorLavengono creati con l’istruzione new root->ref(); Viene creata la camera sempre dicon tipola SoSeparator ma non si possono distruggere corrispondente root->addChild(myCamera); Viene creato il materiale root->addChild(myCamera); root->addChild(new SoDirectionalLight); istruzione delete è lo stesso Open Inventor che amministra la myMaterial->diffuseColor.setValue(1.0, 0.0, 0.0); // Red cancellazione dei nodi. I vari nodi vengono appesi alla radice root->addChild(myMaterial); root->addChild(new SoCone); secondo un preciso ordine. E’ } root->ref(); incrementa il contatore associato al nodo root. Ogni necessario porre laad Open nodo ha= associato un contatore che segnala SoXtRenderArea *myRenderArea new SoXtRenderArea(myWindow); SoPerspectiveCamera per prima Inventor quanti sono gli oggetti che lo utilizzano (padri). myCamera->viewAll(root, myRenderArea->getViewportRegion()); Quando il contatore diventa nullo Open Inventor cancella altrimenti gli oggetti definiti in seguito SoXt::mainLoop(); La SoXtRenderArea èdalla l’area su cui vengono l’oggetto presumendo che non sia piùpromosso incolti uso. non root vengono viene come camera. radice dello myRenderArea->setSceneGraph(root); disegnate le forme, il di costruttore riceve myRenderArea->setTitle("Hello Cone"); Ilnon metodo viewAll SoPerspectiveCamera Scene Graph. Analogamente lanessun luce deve precedere La futura radice della scena è figlia di altro nodo Pone il sistema in un loop infinito in cuie myRenderArea->show(); come parametro myWindow permette allaillumina, di inquadrare tutta gli oggetti materiale dunque ha il contatore posto a zero.che Noi locamera incrementiamo vengono gestiti gli eventi via ilvia provocati la scena definita SoSeparator che SoXt::show(myWindow); artificialmente per preservarlo dalle cancellazioni di Open della deve precedere la nel definizione dall’utente tipo selezioni o movimenti del SoXt::mainLoop(); viene passato come parametro alla Inventor. forma SoCone etc.. mouse return 0; funzione I nodi SHAPE Le più usate: SoCone SoCube SoSphere SoLineSet SoTriangleStripSet