Open Inventor In questa lezione impareremo a:

Slides:



Advertisements
Presentazioni simili
Introduzione al linguaggio C++
Advertisements

Capitolo 4 Trasformazioni Geometriche
LE TRASFORMAZIONI GALILEIANE
IL MOTO CIRCOLARE UNIFORME
a’ = f(a) Definizione e proprietà
Quinta lezione: Stampare e salvare una mappa Stampa e salvataggio in vari formati. Utilizzare il prodotto per inserirlo in relazioni Utilizzarlo come base.
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione, a.a. 2009/2010 Corso di Fondamenti di programmazione a.a. 2009/2010 Prof.ssa Chiara Petrioli.
Cinematica differenziale
Costruzione di Interfacce Lezione 6 Esercitazione Trasformazioni
Costruzione di Interfacce Lezione 4 Sistemi di riferimento e trasformazioni
Costruzione di Interfacce Lezione 4 Nozioni di geometria per la grafica
Costruzione di Interfacce Lezione 5 Trasformazioni Affini
Metodi FEM per problemi ellittici
Il moto armonico Altro esempio interessante di moto è quello armonico caratterizzato dal fatto che l’accelerazione è proporzionale all’opposto della posizione:
Rotazione di un corpo rigido attorno ad un asse fisso
Sistema di riferimento su una retta
Moti del corpo rigido 2) Rotazione 3) Rototraslazione 1) Traslazione
Isometrie del piano In geometria, si definisce isometria
Lezione 7 Dinamica dei sistemi di punti materiali
I Thread.
Fabio Massacci Programmazione ad Oggetti 1 Fondamenti di Informatica per Ingegneria Prof. Ing. Fabio Massacci (A-L) Ing. Enrico Blanzieri (M-Z) Lezione.
Esempi di Java 3D.
1 Ereditarietà Una classe può essere derivata da una classe esistente usando la sintassi: public, protected e private specificano il tipo di accesso ai.
Open Inventor Open Inventor e un object oriented 3D toolkit cioè una libreria di oggetti e metodi per la creazione di applicazioni grafiche interattive.
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.
File di testo, file binari
Algebra Lineare Esercizi assegnati.
I File.
Parte I (I Sensori) I sensori di velocità
Trasformazioni 2D e 3D Daniele Marini.
Vettori Con che verso a Verso
void binario(int n); …………………
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione, a.a. 2009/2010 Corso di Fondamenti di programmazione a.a. 2009/2010 Prof.ssa Chiara Petrioli.
Massimiliano Piscozzi – Sistemi multimediali.
Massimiliano Piscozzi – Sistemi multimediali.
Lavoro di una forza F F A B q s s
Le trasformazioni Daniele Marini.
Open Inventor Open Inventor è un object oriented 3D toolkit, cioè una libreria di oggetti e metodi per la creazione di applicazioni grafiche interattive.
Meccanica 6. I moti nel piano (II).
Gestione dei file di testo, matrici e struct
Una ruota di 25cm di raggio è costituita da un cerchio sottile di massa trascurabile sul quale è inserita rigidamente una pallina, assimilabile ad un punto.
il moto rotatorio di un corpo rigido
I vettori Le grandezze fisiche si dividono in Direzione
Corso Di Programmazione Grafica
Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni – BCOR Ingegneria Elettronica – BELR Introduzione al C Esercitazione 5 D. Bloisi, A.
Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 5 Le strutture informative Corso di Informatica 2 a.a. 2003/04 Lezione 5.
Una "vera" classe.. ..un esempio pratico: la calcolatrice
Esercitazioni su liste
Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2006/2007 Corso di Programmazione 1 a.a.2006/2007 Prof.ssa Chiara Petrioli Corso di Laurea.
Dato un vettore di reali di dimensione DIM, si inseriscano N elementi presi da tastiera, si utilizzi 0 per terminare l’inserimento. Ordinare gli elementi.
Scrollbar java.awt.Scrollbar. Scrollbar Può essere usata anche da sola come slider ha vari costruttori, il più completo permette di inserire orientamento,
Prof. Francesco Zampieri
GRANDEZZE SCALARI E GRANDEZZE VETTORIALI
Un’applicazione del principio di inerzia per il moto rotatorio
La traslazione.
4. I moti nel piano e nello spazio (II)
MEMORANDUM 02 PROIEZIONE CENTRALE, RIBALTAMENTO E OMOLOGIA DEL PIANO:
Daniele Marini Con contributi di Maurizio Rossi
Prof. Giovanni Ianne I vettori.
Il C `e un linguaggio di programmazione di uso generale, originariamente sviluppato per la scrittura del sistema operativo Unix, ed oggi disponibile su.
1 Lezione XI Avviare la presentazione col tasto “Invio”
Avviare la presentazione col tasto “Invio”
1 Lezione IX – terza parte Avviare la presentazione col tasto “Invio”
La circonferenza e l’ellisse La sezione conica è l’intersezione di un piano con un cono. La sezione cambia a seconda dell’inclinazione del piano. Se il.
a’ = f(a) Definizione e proprietà
Le grandezze vettoriali
LE TRASFORMAZIONI GEOMETRICHE
Transcript della presentazione:

Open Inventor In questa lezione impareremo a: Cambiare il colore di una Shape Muovere le shape presenti in scena Caricare i modelli 3D da file Creare un timer che chiami periodicamente una funzione Catturare gli eventi da tastiera per creare applicazioni interattive

I nodi Property I property nodes rappresentano l’apparenza e le caratteristiche qualitative della scena come il materiale degli oggetti, lo stile di disegno o le trasformazioni geometriche. Questo tipo di nodi possono essere divisi in tre sottocategorie: Nodi appearance che modificano l’apparenza degli oggetti quali SoMaterial, SoBaseColor, SoDrawStyle, SoLightModel, SoFont. Ad esempio: SoBaseColor *myColor = new SoBaseColor(); myColor->rgb.setValue(1.0, 0.0, 0.0); Nodi transform che realizzano trasformazioni geometriche quali SoTransform, SoRotation, SoScale, SoTranslation, SoRotationXYZ. Tutti questi nodi sono derivati da SoTransformation. Ad esempio: SoTransform *myXform = new SoTransform(); myXform->translation.setValue(1.0, 0.0, 0.0);

Il nodo SoBaseColor SoSeparator *root = new SoSeparator(); SoCone *cono = new SoCone(); SoBaseColor *myColor = new SoBaseColor(); myColor->rgb.setValue(1.0, 0.0, 0.0); root->addChild(myColor); root->addChild(cono);

Operazioni sui vettori Open Inventor mette a disposizioni due importanti classi per gestire i vettori: SbVec3f SbRotation Per gli SbVec3f sono disponibili molte operazioni di uso comune: somma, lunghezza, prodotto vettoriale e scalare, etc. Il modo più semplice per identificare una SbRotation è attraverso il vettore che rappresenta l’asse di rotazione e un float che rappresenta l’angolo di rotazione intorno all’asse. Sommare l’effetto di due rotazioni equivale a moltiplicarle (poiché OI le rappresenta come matrici): SbRotation rot3 = rot1 * rot2; Per applicare una rotazione ad un certo vettore è sufficiente fare: rot.multVec(vecchioVettore, nuovoVettore);

Il nodo SoTransform (traslazioni) SoSeparator *root = new SoSeparator(); SoCone *cono = new SoCone(); SoTransform *myXform = new SoTransform(); myXform->translation.setValue(0.0, 0.0, 0.0); root->addChild(myXform); root->addChild(cono); …. void muovi(SoTransform *transform) { SbVec3f posizione = transform->translation.getValue(); SbVec3f spostamento(1.0, 0.0, 0.0); transform->translation.setValue(posizione + spostamento); }

Il nodo SoTransform (rotazioni) SoSeparator *root = new SoSeparator(); SoCone *cono = new SoCone(); SoTransform *myXform = new SoTransform(); SbVec3f asseZ(0.0, 0.0, 1.0); myXform->rotation.setValue(asseZ, 0.0); root->addChild(myXform); root->addChild(cono); …. void gira(SoTransform *transform) { SbRotation rotazione = transform->rotation.getValue(); SbRotation deltaRot(asseZ, 0.05); transform->rotation.setValue(rotazione * deltaRot); }

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; }

Il Timer Sensor 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();

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); …