Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
PubblicatoMarta Pappalardo Modificato 10 anni fa
1
Open Inventor (parte progetto) 1)Aggiungere alla classe base (delfino.h, Ufo.h, Veicolo.h, …) le inclusioni di open inventor: #include N.B.: Se si utilizzano altre classi occorre includere i file.h corrispondenti che possono essere trovati sul Reference Manual di Open Inventor
2
Open Inventor (parte progetto) 2) Aggiungere nella parte privata di delfino.h: SoTransform *moto; SoPerspectiveCamera *myCamera; 3) In delfino.h aggiungere al costruttore i parametri SoTransform e SoPerspectiveCamera : Delfino (…….SoTransform *m, SoPerspectiveCamera *myC);
3
Open Inventor (parte progetto) 4) Aggiungere al costruttore a più argomenti di delfino.cpp Delfino (…….SoTransform *m, SoPerspectiveCamera *myC) { … moto = m; myCamera=myC; … }
4
Open Inventor (parte progetto) 5) Modificare le funzioni muoviti(), giraSinistra(), ecc.. Ad. Esempio in muoviti potreste aggiungere alla fine: //modificare il movimento SbRotation rot = moto->rotation.getValue(); SbVec3f spost(moto->posizione.getX(), moto->posizione.getY(), moto->posizione.getZ()); SbVec3f spostRel; rot.multVec(spost, spostRel); moto->translation.setValue(moto->translation.getValue() + spost ); myCamera->position.setValue(myCamera->position.getValue() + spost ); N.B.: il vettore spost è fornito rispetto alla posizione iniziale della moto, spostRel tiene invece conto delleffettiva direzione della moto.
5
Open Inventor (parte progetto) 6) Creare un file (ad. Esempio testInventor.cpp) con un main che gestisca la creazione degli oggetti di base in Open Inventor (vedi file testInventor.cpp). 7) A tale file aggiungere i metodi readFile, timerCallBack, myKeyPressCB, analoghi a quelli dei lucidi seguenti ed opportunamente modificati secondo il proprio progetto.
6
Caricare i modelli 3D da file SoSeparator *readFile(const char *filename) { SoInput mySceneInput; if (!mySceneInput.openFile(filename)) { fprintf(stderr, "Cannot open file %s\n", filename); return NULL; } SoSeparator *myGraph = SoDB::readAll(&mySceneInput); if (myGraph == NULL) { fprintf(stderr, "Problem reading file\n"); return NULL; } mySceneInput.closeFile(); return myGraph; }
7
void timerCallback (void *data, SoSensor *) { Veicolo *mioVeicolo = (Veicolo*) data; // conversione esplicita mioVeicolo->muovi(0.04); } …. Veicolo mioVeicolo; … SoTimerSensor *myTimerSensor = new SoTimerSensor(timerCallback, &mioVeicolo); timerSensor->setInterval(0.04f); // 1/25 sec = 0.04 timerSensor->schedule(); Il Timer Sensor
8
Catturare gli eventi da tastiera void myKeyPressCB(void *data, SoEventCallback *eventCB) { Veicolo *veicolo = (Veicolo*) data; const SoEvent *event = eventCB->getEvent(); if (SO_KEY_PRESS_EVENT(event, UP_ARROW )) { veicolo->accelera(); } eventCB->setHandled(); } … SoEventCallback *myEventCB = new SoEventCallback; myEventCB->addEventCallback( SoKeyboardEvent::getClassTypeId(), myKeyPressCB, veicolo); root->addChild(myEventCB); …
9
testInventor.cpp
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.