Introduzione a Panda3D -...

50
Introduzione a Panda3D Introduzione a Panda3D Davide Gadia Davide Gadia Corso di Ambienti Virtuali Immersivi e Interattivi Corso di Ambienti Virtuali Immersivi e Interattivi Laurea Magistrale in Informatica per la Comunicazione Laurea Magistrale in Informatica per la Comunicazione a.a. 2012/2013 a.a. 2012/2013

Transcript of Introduzione a Panda3D -...

Page 1: Introduzione a Panda3D - unimi.itgadia.di.unimi.it/avii/aa_1213/files/lezioni/AVII_08a_Intro_Panda3D.pdf · shift+b fornisce le informazioni sulla bounding box Utilizzo i dati nel

Introduzione a Panda3DIntroduzione a Panda3D

Davide GadiaDavide Gadia

Corso di Ambienti Virtuali Immersivi e InterattiviCorso di Ambienti Virtuali Immersivi e Interattivi

Laurea Magistrale in Informatica per la ComunicazioneLaurea Magistrale in Informatica per la Comunicazione

a.a. 2012/2013a.a. 2012/2013

Page 2: Introduzione a Panda3D - unimi.itgadia.di.unimi.it/avii/aa_1213/files/lezioni/AVII_08a_Intro_Panda3D.pdf · shift+b fornisce le informazioni sulla bounding box Utilizzo i dati nel

• 3D engine sviluppato attualmente da Disney and Carnegie Mellon University's Entertainment Technology Center

• Utilizzato anche per prodotti commerciali

• http://www.panda3d.org

Panda3D

Page 3: Introduzione a Panda3D - unimi.itgadia.di.unimi.it/avii/aa_1213/files/lezioni/AVII_08a_Intro_Panda3D.pdf · shift+b fornisce le informazioni sulla bounding box Utilizzo i dati nel

• Sviluppato in C++• Possibilità di utilizzare C++ o Python

• Python utilizzato per scripting Binding al core dell'engine, che è sviluppato in C++ Permette sviluppo codice in maniera + facile e + veloce

Panda3D: C++ o Python ?

Page 4: Introduzione a Panda3D - unimi.itgadia.di.unimi.it/avii/aa_1213/files/lezioni/AVII_08a_Intro_Panda3D.pdf · shift+b fornisce le informazioni sulla bounding box Utilizzo i dati nel

• Python per tutto quello che non è calcolo matematico computazionalmente complesso

• C++ per parti di calcolo complesso

• Chiamare C++ da Python SWIG http://www.swig.org Ctypes http://docs.python.org/library/ctypes.html

• Alternativa per velocizzare conti senza usare C++ Numpy http://numpy.scipy.org/

• Vedremo qualcosa di questo.....

Panda3D: strategia per progetti complessi

Page 5: Introduzione a Panda3D - unimi.itgadia.di.unimi.it/avii/aa_1213/files/lezioni/AVII_08a_Intro_Panda3D.pdf · shift+b fornisce le informazioni sulla bounding box Utilizzo i dati nel

• Formati nativi : EGG BAM

Panda3D: modelli e animazioni

Page 6: Introduzione a Panda3D - unimi.itgadia.di.unimi.it/avii/aa_1213/files/lezioni/AVII_08a_Intro_Panda3D.pdf · shift+b fornisce le informazioni sulla bounding box Utilizzo i dati nel

• ASCII• File di produzione e debugging• Contiene:

Geometria Animazioni Joint Parametri textures ....

• Spesso geometria e animazione sono su file diversi In relazione a separazione tra Models e Actors in Panda3D

Panda3D: formato EGG

Page 7: Introduzione a Panda3D - unimi.itgadia.di.unimi.it/avii/aa_1213/files/lezioni/AVII_08a_Intro_Panda3D.pdf · shift+b fornisce le informazioni sulla bounding box Utilizzo i dati nel

• Plugin per diversi software di CG Maya

http://www.panda3d.org/manual/index.php/Converting_from_Maya Blender

http://www.panda3d.org/manual/index.php/Converting_from_Blenderhttp://sourceforge.net/projects/chicken-export/ (Blender 2.49)https://code.google.com/p/yabee/ (Blender 2.6x)

......

• Applicativi Panda3D per conversione diretta in EGG http://www.panda3d.org/manual/index.php/List_of_Panda3D_Executables

• Forum Panda3D su questioni esportazione in EGG: http://www.panda3d.org/forums/viewforum.php?f=2

• Applicativo pview: preview modelli EGG http://www.panda3d.org/manual/index.php/Previewing_3D_Models_in_Pview

Panda3D: formato EGG

Page 8: Introduzione a Panda3D - unimi.itgadia.di.unimi.it/avii/aa_1213/files/lezioni/AVII_08a_Intro_Panda3D.pdf · shift+b fornisce le informazioni sulla bounding box Utilizzo i dati nel

• Binario• File di rilascio• EGG file vengono convertiti in BAM al primo caricamento• Processo può essere lungo• BAM sono legati alla versione di Panda3D

Se cambia la versione bisogna generare nuovamente i file

Panda3D: formato BAM

Page 9: Introduzione a Panda3D - unimi.itgadia.di.unimi.it/avii/aa_1213/files/lezioni/AVII_08a_Intro_Panda3D.pdf · shift+b fornisce le informazioni sulla bounding box Utilizzo i dati nel

• Formato nativo DirectX Formato complesso ma ben supportato dai vari software Esportazione da Blender Attenzione: vanno esportati tutti i frame di un'animazione Può essere convertito in BAM tramite comando x2egg

http://www.panda3d.org/manual/index.php/List_of_Panda3D_Executables

Panda3D: supporto file X

Page 10: Introduzione a Panda3D - unimi.itgadia.di.unimi.it/avii/aa_1213/files/lezioni/AVII_08a_Intro_Panda3D.pdf · shift+b fornisce le informazioni sulla bounding box Utilizzo i dati nel

• Opzione 1: Fate voi modellazione, texturing e animazione Sconsigliato se non siete già esperti o se non avete MOLTO tempo

per occuparvene OLTRE allo sviluppo del progetto

• Opzione 2: Cercate modelli già fatti, possibilmente privi di vincoli di copyright Cercate su forum Panda3D, community Blender, web in generale

Modelli per progetto finale

Page 11: Introduzione a Panda3D - unimi.itgadia.di.unimi.it/avii/aa_1213/files/lezioni/AVII_08a_Intro_Panda3D.pdf · shift+b fornisce le informazioni sulla bounding box Utilizzo i dati nel

• Link a modelli gratuiti, suoni, tutorial, ecc http://homes.dico.unimi.it/~gadia/avii/aa_1213/index.html#link Qualità varia, con o senza animazioni Controllate eventuali aggiunte durante il corso

Link utili

Page 12: Introduzione a Panda3D - unimi.itgadia.di.unimi.it/avii/aa_1213/files/lezioni/AVII_08a_Intro_Panda3D.pdf · shift+b fornisce le informazioni sulla bounding box Utilizzo i dati nel

• “Config.prc” Windows: ...\cartella_installazione_Panda3D\etc\ Linux: /etc/ OSX: /Developer/Panda3D/etc/

• Controlla molte impostazioni globali Scelta tra OpenGL o DirectX Risoluzione finestra Opzione fullscreen Opzioni su messaggi output Attivazione e scelta visualizzazione stereo ..... http://www.panda3d.org/manual/index.php/Configuring_Panda3D

Panda3D: file di configurazione

Page 13: Introduzione a Panda3D - unimi.itgadia.di.unimi.it/avii/aa_1213/files/lezioni/AVII_08a_Intro_Panda3D.pdf · shift+b fornisce le informazioni sulla bounding box Utilizzo i dati nel

• Non opportuno modificare il file globale per ogni applicazione• Possibili approcci:

Utilizzare file di default, e modificare singole opzioni all'interno del codice Python, chiamando loadPrcFileData

I cambiamenti non vengono scritti sul file esterno

Caricare da codice Python un nuovo file di configurazione locale tramite loadPrcFile

Permette di gestire localmente applicazioni con molti parametri diversi dai valori standard del file di configurazione globale

Possibilità di creare variabili di configurazioni ad-hoc tramite ConfigVariableString, ConfigVariableInt, ecc....

Panda3D: file di configurazione

Page 14: Introduzione a Panda3D - unimi.itgadia.di.unimi.it/avii/aa_1213/files/lezioni/AVII_08a_Intro_Panda3D.pdf · shift+b fornisce le informazioni sulla bounding box Utilizzo i dati nel

• Queste slide (e quelle della prossima lezione) NON sostituiscono la documentazione di Panda3D E non comprendono TUTTI gli aspetti implementativi che

potrebbero servire per il progetto finale

• Servono solo come punto di riferimento per gli aspetti principali di un'applicazione Panda3D e con la sua documentazione Gli studenti sono invitati ad approfondire altri aspetti che possono

essere importanti (es: simulazione fisica, AI, ...) Una volta acquisiti gli aspetti base

Tramite la consultazione della documentazione, dei forum e degli eventuali esempi

Slide vs documentazione di Panda3D

Page 15: Introduzione a Panda3D - unimi.itgadia.di.unimi.it/avii/aa_1213/files/lezioni/AVII_08a_Intro_Panda3D.pdf · shift+b fornisce le informazioni sulla bounding box Utilizzo i dati nel

• Queste slide (e quelle della prossima lezione) NON affrontano tutti gli aspetti tipici della programmazione di videogiochi E di quello che viene presentato, non entrano eccessivamente nel

dettaglio

• Gli studenti sono invitati ad approfondire altri aspetti che possono essere importanti per il progetto Es: shader, gestione avanzata collisioni, ecc Nella valutazione del progetto verrà valutata la capacità di

approfondimento, e l'eventuale integrazione di tecniche avanzate Non è richiesta l'implementazione da zero di tecniche aggiuntive

non direttamente essenziali agli obiettivi finali del progetto una integrazione “cosciente” di codice già esistente è

accettata Parlarne comunque per tempo con il docente!

Slide vs programmazione grafica real-time

Page 16: Introduzione a Panda3D - unimi.itgadia.di.unimi.it/avii/aa_1213/files/lezioni/AVII_08a_Intro_Panda3D.pdf · shift+b fornisce le informazioni sulla bounding box Utilizzo i dati nel

• E' la classe principale di Panda3D Carica la maggior parte dei moduli principali Crea la finestra di disegno Crea e gestisce una camera Avvia il task manager e alcuni task di base Avvia un loop di esecuzione tramite il metodo run()

• DirectStart Scorciatoia per ShowBase Istanzia ShowBase direttamente dall'importazione Permette di snellire il codice di inizializzazione

Classe ShowBase

Page 17: Introduzione a Panda3D - unimi.itgadia.di.unimi.it/avii/aa_1213/files/lezioni/AVII_08a_Intro_Panda3D.pdf · shift+b fornisce le informazioni sulla bounding box Utilizzo i dati nel

• Panda3D organizza gli oggetti in una struttura ad albero

• Istanze di PandaNode Superclasse per altre classi relative a Modelli, Camera, ecc...

• La radice è un nodo chiamato render

• Posizioni, attributi, ecc applicati in maniera gerarchica Se applicati a un nodo padre, vengono applicati a tutto il

sottoalbero

SceneGraph

Page 18: Introduzione a Panda3D - unimi.itgadia.di.unimi.it/avii/aa_1213/files/lezioni/AVII_08a_Intro_Panda3D.pdf · shift+b fornisce le informazioni sulla bounding box Utilizzo i dati nel

• NodePath Contiene puntatore ad un PandaNode Più altri dati

• Rappresentano una interfaccia con i PandaNode Applico operazioni e altro ai NodePath Sono poi applicate ai rispettivi PandaNode

• Alcune operazioni sono specifiche di un certo tipo di nodo Devo applicarle direttamente al PandaNode nodePath.node().callsomemethod(...)

SceneGraph

Page 19: Introduzione a Panda3D - unimi.itgadia.di.unimi.it/avii/aa_1213/files/lezioni/AVII_08a_Intro_Panda3D.pdf · shift+b fornisce le informazioni sulla bounding box Utilizzo i dati nel

SceneGraph

Page 20: Introduzione a Panda3D - unimi.itgadia.di.unimi.it/avii/aa_1213/files/lezioni/AVII_08a_Intro_Panda3D.pdf · shift+b fornisce le informazioni sulla bounding box Utilizzo i dati nel

SceneGraph

Page 21: Introduzione a Panda3D - unimi.itgadia.di.unimi.it/avii/aa_1213/files/lezioni/AVII_08a_Intro_Panda3D.pdf · shift+b fornisce le informazioni sulla bounding box Utilizzo i dati nel

• Diverso da sistema utilizzato da OpenGL o DirectX

Sistema di riferimento di Panda3D

Page 22: Introduzione a Panda3D - unimi.itgadia.di.unimi.it/avii/aa_1213/files/lezioni/AVII_08a_Intro_Panda3D.pdf · shift+b fornisce le informazioni sulla bounding box Utilizzo i dati nel

• Traslazione cube.setPos(x,y,z) cube.setX(x), cube.setY(y), cube.setZ(z)

• Scala cube.setScale(s) cube.setSx(sx), cube.setSy(sy), cube.setSz(sz)

• Rotazione cube.setHpr(h,p,r) cube.setH(h), cube.setP(p), cube.setR(r)

Trasformazioni

Page 23: Introduzione a Panda3D - unimi.itgadia.di.unimi.it/avii/aa_1213/files/lezioni/AVII_08a_Intro_Panda3D.pdf · shift+b fornisce le informazioni sulla bounding box Utilizzo i dati nel

• myNodePath.lookAt(....) Setta la matrice di trasformazione in modo da rivolgere l'oggetto

verso un altro oggetto NodePath, coordinate 3D, ecc

Particolarmente utile per camera

• myNodePath.setPos(otherNodePath, X, Y, Z) Posiziona l'oggetto in (X,Y,Z) rispetto alla posizione di un altro

NodePath Anche relativamente a se stesso

• Tutte le trasformazioni assieme: cube.setPosHprScale( x, y, x, h, p, r, sx, sy, sz )

Trasformazioni

Page 24: Introduzione a Panda3D - unimi.itgadia.di.unimi.it/avii/aa_1213/files/lezioni/AVII_08a_Intro_Panda3D.pdf · shift+b fornisce le informazioni sulla bounding box Utilizzo i dati nel

• Parametri di scala, posizione e rotazione vanno inseriti manualmente Può essere un problema capire bene con i modelli dell'ambiente,

soprattutto se piuttosto grandi

• Per gestire almeno la traslazione iniziale (per visualizzare tutto il modello) Visualizzo il modello in pview

shift+b fornisce le informazioni sulla bounding box Utilizzo i dati nel codice

nodepath.getBounds().getRadius() Fornisce il diametro della bounding sphere del modello Posso traslare il modello sulle Y per poi rifinire meglio i parametri di rotazione e scala

Gestione posizione iniziale modelli

Page 25: Introduzione a Panda3D - unimi.itgadia.di.unimi.it/avii/aa_1213/files/lezioni/AVII_08a_Intro_Panda3D.pdf · shift+b fornisce le informazioni sulla bounding box Utilizzo i dati nel

• Posizionamento iniziale del modello può richiedere un po' di tentativi In alcuni casi si può parametrizzare In altri va fatto manualmente

• Posizionamento di oggetti su piani/pavimenti/terreno

Può essere difficile evitare compenetrazioni o fluttuazioni Si possono utilizzare strumenti per la collision detection

CollisionHandlerFloor CollisionRay

Raggio da oggetto in verticale verso terreno Determino punto di intersezione e posiziono di

conseguenza Ottimo per terreni non planari

Ved esempio RoamingRalph

Gestione posizione iniziale modelli

Page 26: Introduzione a Panda3D - unimi.itgadia.di.unimi.it/avii/aa_1213/files/lezioni/AVII_08a_Intro_Panda3D.pdf · shift+b fornisce le informazioni sulla bounding box Utilizzo i dati nel

• Modelli con animazione keyframing Figure antropomorfe Rigging e skinning creati in SW di animazione CG Esportati in formato egg

Di solito, 1 modello con la geometria Modelli separati con parametri di animazione dei joint

• Possibilità di: caricare attivare interpolare diverse animazioni

• http://www.panda3d.org/manual/index.php/Loading_Actors_and_Animations

(e pagine seguenti)

Actors

Page 27: Introduzione a Panda3D - unimi.itgadia.di.unimi.it/avii/aa_1213/files/lezioni/AVII_08a_Intro_Panda3D.pdf · shift+b fornisce le informazioni sulla bounding box Utilizzo i dati nel

• Funzioni che vengono eseguite in ogni frame Ottimo per animazioni, controlli, ecc... Può continuare sempre (ritorna task.cont) Può fermarsi (ritorna task.done) Si può controllare da quanto tempo è eseguito (task.time) O da quanti frame (task.frame)

• Do-later task Task che vengono eseguiti una volta sola dopo un certo tempo Possono essere ripetuti (ritorna task.again)

Task

Page 28: Introduzione a Panda3D - unimi.itgadia.di.unimi.it/avii/aa_1213/files/lezioni/AVII_08a_Intro_Panda3D.pdf · shift+b fornisce le informazioni sulla bounding box Utilizzo i dati nel

• Task specifici per la gestione di azioni, interpolate lungo un intervallo temporale

Posizione Rotazione Scala Parametri di funzione Suono .....

• Utili per la creazione di animazioni e sequenze di animazioni• http://www.panda3d.org/manual/index.php/Intervals

(e pagine seguenti)

Intervals

Page 29: Introduzione a Panda3D - unimi.itgadia.di.unimi.it/avii/aa_1213/files/lezioni/AVII_08a_Intro_Panda3D.pdf · shift+b fornisce le informazioni sulla bounding box Utilizzo i dati nel

• Controlli con cui specificare l'attivazione di diversi intervalli In sequenza (Sequences) O in parallelo (Parallels) Anche in maniera annidata (diversi Parallels dentro una Sequence,

ecc) Possibilità di temporizzarne la partenza

• Possibilità di creare sequenze di animazioni complesse e scriptabili

• http://www.panda3d.org/manual/index.php/Sequences_and_Parallels

(e pagine seguenti)

Sequence e Parallels

Page 30: Introduzione a Panda3D - unimi.itgadia.di.unimi.it/avii/aa_1213/files/lezioni/AVII_08a_Intro_Panda3D.pdf · shift+b fornisce le informazioni sulla bounding box Utilizzo i dati nel

• Input di mouse e tastiera, definiti dall'utente• Gestiti dal “messenger”• Deve essere definita una classe che eredita da DirecObject

Il gestore dell'evento sarà un metodo della classe myDirectObject.accept('Event Name',myDirectObjectMethod) Può essere gestito una volta sola (myDirectObject.acceptOnce(..)) Può essere ignorato (myDirectObject.ignore('Event Name'))

• L'evento viene inviato al gestore tramite myDirectObject.accept('Event Name') Messenger mantiene riferimento al gestore anche se viene

cancellato Bisogna chiamare prima myDirectObject.ignoreAll()

Gestione eventi

Page 31: Introduzione a Panda3D - unimi.itgadia.di.unimi.it/avii/aa_1213/files/lezioni/AVII_08a_Intro_Panda3D.pdf · shift+b fornisce le informazioni sulla bounding box Utilizzo i dati nel

• Eventi Mouse: Tasti premuti, rilasciati, movimento rotella Impostazioni di default: mouse controlla movimento camera

base.disableMouse() per disabilitare la funzionalità (non il mouse)

http://www.panda3d.org/manual/index.php/Mouse_Support per dettagli

• Eventi tastiera: Tasto premuto, rilasciato, o tenuto premuto (sequenza di eventi) http://www.panda3d.org/manual/index.php/Keyboard_Support

Per dettagli

Mouse e Tastiera

Page 32: Introduzione a Panda3D - unimi.itgadia.di.unimi.it/avii/aa_1213/files/lezioni/AVII_08a_Intro_Panda3D.pdf · shift+b fornisce le informazioni sulla bounding box Utilizzo i dati nel

• Possibilità di caricare suoni per background, effetti, ecc... http://www.panda3d.org/manual/index.php/Loading_and_Playing_Sounds_and_Music e seguenti.....

• Audio 3D Seleziono oggetto “listener”

Di solito, la camera Seleziono oggetto sorgente

Un Nodepath Associo un suono all'oggetto sorgente (NB: suono deve essere MONO) Intensità suono varierà allo spostarsi della camera Spostandosi tra le varie casse http://www.panda3d.org/manual/index.php/3D_Audio

• Supporto Surround 5.1 Inserire fmod-use-surround-sound true in file Config.prc

Audio

Page 33: Introduzione a Panda3D - unimi.itgadia.di.unimi.it/avii/aa_1213/files/lezioni/AVII_08a_Intro_Panda3D.pdf · shift+b fornisce le informazioni sulla bounding box Utilizzo i dati nel

• Impostazioni di default: mouse controlla movimento camera base.disableMouse() per disabilitare la funzionalità (non il

mouse) Altrimenti ogni comando viene ignorato

• base.useDrive() Abilita altro controllo camera usando mouse e tastiera

Camera – gestione base

Page 34: Introduzione a Panda3D - unimi.itgadia.di.unimi.it/avii/aa_1213/files/lezioni/AVII_08a_Intro_Panda3D.pdf · shift+b fornisce le informazioni sulla bounding box Utilizzo i dati nel

• base.cam vs base.camera Il primo è il NodePath della camera Il secondo è un NodePath di livello superiore

Di solito è quello che viene utilizzato per muovere la camera

• base.oobe() Il codice controlla base.camera Mouse controlla base.cam “Out of the body experience” utile per debug

Camera – gestione base

Page 35: Introduzione a Panda3D - unimi.itgadia.di.unimi.it/avii/aa_1213/files/lezioni/AVII_08a_Intro_Panda3D.pdf · shift+b fornisce le informazioni sulla bounding box Utilizzo i dati nel

Camera – gestione base

Page 36: Introduzione a Panda3D - unimi.itgadia.di.unimi.it/avii/aa_1213/files/lezioni/AVII_08a_Intro_Panda3D.pdf · shift+b fornisce le informazioni sulla bounding box Utilizzo i dati nel

Camera – gestione base

Page 37: Introduzione a Panda3D - unimi.itgadia.di.unimi.it/avii/aa_1213/files/lezioni/AVII_08a_Intro_Panda3D.pdf · shift+b fornisce le informazioni sulla bounding box Utilizzo i dati nel

Camera – gestione base

Page 38: Introduzione a Panda3D - unimi.itgadia.di.unimi.it/avii/aa_1213/files/lezioni/AVII_08a_Intro_Panda3D.pdf · shift+b fornisce le informazioni sulla bounding box Utilizzo i dati nel

Camera – gestione base

Page 39: Introduzione a Panda3D - unimi.itgadia.di.unimi.it/avii/aa_1213/files/lezioni/AVII_08a_Intro_Panda3D.pdf · shift+b fornisce le informazioni sulla bounding box Utilizzo i dati nel

Camera – gestione base

Page 40: Introduzione a Panda3D - unimi.itgadia.di.unimi.it/avii/aa_1213/files/lezioni/AVII_08a_Intro_Panda3D.pdf · shift+b fornisce le informazioni sulla bounding box Utilizzo i dati nel

Camera – gestione base

Page 41: Introduzione a Panda3D - unimi.itgadia.di.unimi.it/avii/aa_1213/files/lezioni/AVII_08a_Intro_Panda3D.pdf · shift+b fornisce le informazioni sulla bounding box Utilizzo i dati nel

• Devo attivare la modalità stereo in Config.prg Imposto framebuffer-stereo #t (quadbuffer in Teatro Virtuale) Oppure red-blue-stereo #t (anaglifo)

• Posso impostare interoculare e convergenza In Config.prc:

default-iod valore default-converge valore

Nel codice dell'applicazione: base.camLens.setInterocularDistance(valore) base.camLens.setConvergenceDistance(valore)

Camera – gestione stereo

Page 42: Introduzione a Panda3D - unimi.itgadia.di.unimi.it/avii/aa_1213/files/lezioni/AVII_08a_Intro_Panda3D.pdf · shift+b fornisce le informazioni sulla bounding box Utilizzo i dati nel

• Panda3D utilizza camera off-axis per stereoscopia Il parametro di convergenza è relativo alla distanza dal piano di

parallasse zero Non a un'effettivo angolo di convergenza delle camere

• Panda3D utilizza un'unità di misura fittizia chiamata pm Panda meters 1 pm = 1 piede = 0.3038 metri Si può comunque utilizzare la scala desiderata, basta mantenere

coerenza nella scena

Camera – gestione stereo

Page 43: Introduzione a Panda3D - unimi.itgadia.di.unimi.it/avii/aa_1213/files/lezioni/AVII_08a_Intro_Panda3D.pdf · shift+b fornisce le informazioni sulla bounding box Utilizzo i dati nel

• Sistema che permette la rilevazione delle compenetrazioni tra i modelli E di implementare l'eventuale simulazione in risposta

Es: rimbalzo, respinta, acquisizione di punti, ecc

• Computazionalmente costoso da fare in real-time

• Di solito si utilizzano tecniche di approssimazione Bounding spheres, Bounding box Suddivisione gerarchica (octree, BSP-tree) della scena

• Per testare la possibilità di collisione, ed eventualmente evitare di fare calcoli complessi su tutta la geometria

Collision detection

Page 44: Introduzione a Panda3D - unimi.itgadia.di.unimi.it/avii/aa_1213/files/lezioni/AVII_08a_Intro_Panda3D.pdf · shift+b fornisce le informazioni sulla bounding box Utilizzo i dati nel

Bounding Sphere Test

No intersezione BS

No intersezione oggetti

Faccio test su oggetti

Intersezione BS

No intersezione oggetti

Intersezione BS

Faccio test su oggetti

Intersezione oggetti

Page 45: Introduzione a Panda3D - unimi.itgadia.di.unimi.it/avii/aa_1213/files/lezioni/AVII_08a_Intro_Panda3D.pdf · shift+b fornisce le informazioni sulla bounding box Utilizzo i dati nel

• Collision Solids: Solidi legati alla geometria del modello per determinare in

maniera semplificata l'eventuale collisione Diverse tipologie a disposizione Distinzione tra solidi “from” (modelli attivi, che provocano la

collisione), e solidi “into” (modelli passivi, che ricevono la collisione)

Posso assegnare diversi solidi allo stesso modello, per esempio una sfera grande per tutto il modello, più sfere piu' piccole sulle mani o i piedi, ecc

http://www.panda3d.org/manual/index.php/Collision_Solids

Collision detection in Panda3D

Page 46: Introduzione a Panda3D - unimi.itgadia.di.unimi.it/avii/aa_1213/files/lezioni/AVII_08a_Intro_Panda3D.pdf · shift+b fornisce le informazioni sulla bounding box Utilizzo i dati nel

• Collision Traverser: È il task che, definiti i collision solids, controlla le collisioni tra i

solidi, e passa le informazioni al Collision Handler definito L'effettiva distinzione tra solidi from e into avviene assegnando al

Traverser solo i solidi che voglio considerare from Tutti gli altri collision solids vengono considerati into Se non viene indicato il contrario, un solido from viene anche

trattato come into, rispetto agli altri solidi from presenti nella scena

http://www.panda3d.org/manual/index.php/Collision_Traversers

Collision detection in Panda3D

Page 47: Introduzione a Panda3D - unimi.itgadia.di.unimi.it/avii/aa_1213/files/lezioni/AVII_08a_Intro_Panda3D.pdf · shift+b fornisce le informazioni sulla bounding box Utilizzo i dati nel

• Collision Handler: Specifica cosa fare in risposta alla collisione Diversi tipi disponibili Generici:

CollisionHandlerQueue : i record delle collisioni sono messe in una queue. Devo attraversare la struttura dati e implementare manualmente le funzioni di risposta

CollisionHandlerEvent : al posto di salvare i dati delle collisioni, lancia un evento quando viene rilevata una collisione

Specifici: CollisionHandlerPusher e PhysicsCollisionHandler: gestisce

anche la risposta, respingendo automaticamente l'oggetto from dall'oggetto into

CollisionHandlerFloor: mantiene un oggetto posizionato sul modello del pavimento

http://www.panda3d.org/manual/index.php/Collision_Handlers

Collision detection in Panda3D

Page 48: Introduzione a Panda3D - unimi.itgadia.di.unimi.it/avii/aa_1213/files/lezioni/AVII_08a_Intro_Panda3D.pdf · shift+b fornisce le informazioni sulla bounding box Utilizzo i dati nel

• Possibilità di considerare collisioni solo tra sottogruppi di solidi Il Traverser di default controlla tutti i from con tutti gli into Utilizzo di Bitmask per selezionare/vincolare relazioni di collisione

tra i solidi http://www.panda3d.org/manual/index.php/Collision_Bitmasks

Collision detection in Panda3D

Page 49: Introduzione a Panda3D - unimi.itgadia.di.unimi.it/avii/aa_1213/files/lezioni/AVII_08a_Intro_Panda3D.pdf · shift+b fornisce le informazioni sulla bounding box Utilizzo i dati nel

• Gestire le collisioni utilizzando la geometria reale del modello è costoso computazionalmente Ma è necessario se oggetto molto complesso e difficile da

“approssimare” con un solido di collisione Può essere necessario comunque accedere alle informazioni

precise su vertici e facce coinvolte Dopo i test preliminari sui solidi di collisione

• Se faccio collision testing direttamente sulla geometria Utilizzare la BitMask specifica per limitare quanto più possibile

test inutili e costosi

• Posso impostare direttamente nel file egg la creazione di collision surface che seguano topologia e gerarchia della geometria Devo inserire <Collide> { Polyset keep descend } dopo il tag Group

e prima del tag VertexPool Per tutti i Group, usare search/replace su tutto il file

••

Collision detection in Panda3D

Page 50: Introduzione a Panda3D - unimi.itgadia.di.unimi.it/avii/aa_1213/files/lezioni/AVII_08a_Intro_Panda3D.pdf · shift+b fornisce le informazioni sulla bounding box Utilizzo i dati nel

• Collision solids possono essere utilizzati anche per funzionalità particolari Portali Trigger di eventi (non legati all'effettivo feedback di una

collisione) Selezione, misura distanza (CollisionRay) …..

• Post con esempi di collisioni da scaricare: http://www.panda3d.org/forums/viewtopic.php?t=....

Collision detection in Panda3D