esame di elementi di grafica digitale prof. matjaz hmeljak marco bacer 12 gennaio 2009
TRANSCRIPT
![Page 1: Esame di Elementi di Grafica Digitale Prof. Matjaz Hmeljak Marco Bacer 12 gennaio 2009](https://reader037.vdocuments.pub/reader037/viewer/2022103113/5542eb50497959361e8bfe73/html5/thumbnails/1.jpg)
Esame di “Elementi di Grafica Digitale”
Prof. Matjaz Hmeljak
Marco Bacer12 gennaio 2009
![Page 2: Esame di Elementi di Grafica Digitale Prof. Matjaz Hmeljak Marco Bacer 12 gennaio 2009](https://reader037.vdocuments.pub/reader037/viewer/2022103113/5542eb50497959361e8bfe73/html5/thumbnails/2.jpg)
Nelle simulazioni fisiche e nei videogiochi si parla di collision detection riferendosi a quegli algoritmi utilizzati per verificare le collisioni (come ad esempio l’intersezione tra due solidi)
La simulazione di ciò che avviene una volta rilevata la collisione si dice collision response
![Page 3: Esame di Elementi di Grafica Digitale Prof. Matjaz Hmeljak Marco Bacer 12 gennaio 2009](https://reader037.vdocuments.pub/reader037/viewer/2022103113/5542eb50497959361e8bfe73/html5/thumbnails/3.jpg)
È indipendente dalla libreria grafica utilizzata
È un problema abbastanza complicato
Non c’è un unico approccio Dipende dal tipo di programma che si
vuole realizzare
![Page 4: Esame di Elementi di Grafica Digitale Prof. Matjaz Hmeljak Marco Bacer 12 gennaio 2009](https://reader037.vdocuments.pub/reader037/viewer/2022103113/5542eb50497959361e8bfe73/html5/thumbnails/4.jpg)
Un fattore importante per la progettazione della collision detection è la determinazione di quanto spesso avvengono le collisioni e quali sono le collisioni che hanno più importanza
Nel caso di un videogame: sono rilevanti solo le collisioni con il protagonista o anche quelle tra ogni coppia di oggetti presente nel gioco?
![Page 5: Esame di Elementi di Grafica Digitale Prof. Matjaz Hmeljak Marco Bacer 12 gennaio 2009](https://reader037.vdocuments.pub/reader037/viewer/2022103113/5542eb50497959361e8bfe73/html5/thumbnails/5.jpg)
Ci sono molte tecniche Solitamente tutte ruotano attorno al
“trucco” di raggruppare assieme oggetti vicini
È possibile ottenere esattamente ogni collisione basandosi sui poligoni che compongono il solido, ma solitamente si preferisce approssimare la forma degli oggetti con qualcosa di più semplice
![Page 6: Esame di Elementi di Grafica Digitale Prof. Matjaz Hmeljak Marco Bacer 12 gennaio 2009](https://reader037.vdocuments.pub/reader037/viewer/2022103113/5542eb50497959361e8bfe73/html5/thumbnails/6.jpg)
![Page 7: Esame di Elementi di Grafica Digitale Prof. Matjaz Hmeljak Marco Bacer 12 gennaio 2009](https://reader037.vdocuments.pub/reader037/viewer/2022103113/5542eb50497959361e8bfe73/html5/thumbnails/7.jpg)
Un’altra tecnica comune è quella di fare un check rapido di quali oggetti potrebbero collidere, prima di perdere tempo per fare un controllo più complicato
Ad esempio si può verificare se le sfere che contengono gli oggetti collidono, e solo se l’esito è positivo si procede a controlli più approfonditi
![Page 8: Esame di Elementi di Grafica Digitale Prof. Matjaz Hmeljak Marco Bacer 12 gennaio 2009](https://reader037.vdocuments.pub/reader037/viewer/2022103113/5542eb50497959361e8bfe73/html5/thumbnails/8.jpg)
Una scatola con pareti trasparenti Ad ogni pressione della spacebar
vengono inserite nella scatola 10 palline
La forza di gravità fa cadere e rimbalzare le palline tra di loro e contro le pareti
![Page 9: Esame di Elementi di Grafica Digitale Prof. Matjaz Hmeljak Marco Bacer 12 gennaio 2009](https://reader037.vdocuments.pub/reader037/viewer/2022103113/5542eb50497959361e8bfe73/html5/thumbnails/9.jpg)
![Page 10: Esame di Elementi di Grafica Digitale Prof. Matjaz Hmeljak Marco Bacer 12 gennaio 2009](https://reader037.vdocuments.pub/reader037/viewer/2022103113/5542eb50497959361e8bfe73/html5/thumbnails/10.jpg)
Per trovare tutte le collisioni è possibile controllare per ogni paio di palline se la distanza è minore della somma dei raggi
Tuttavia una volta raggiunte le 300 palline ci ritroveremmo a dover controllare circa 50000 paia di palline per potenziali collisioni
![Page 11: Esame di Elementi di Grafica Digitale Prof. Matjaz Hmeljak Marco Bacer 12 gennaio 2009](https://reader037.vdocuments.pub/reader037/viewer/2022103113/5542eb50497959361e8bfe73/html5/thumbnails/11.jpg)
Un approccio più efficace e quello di dividere il cubo a metà lungo ogni dimensione
A questo punto basta trovare in quale sottocubo(o cubi) si trova una pallina e controllare ogni paia di palline presenti in quel cubo
![Page 12: Esame di Elementi di Grafica Digitale Prof. Matjaz Hmeljak Marco Bacer 12 gennaio 2009](https://reader037.vdocuments.pub/reader037/viewer/2022103113/5542eb50497959361e8bfe73/html5/thumbnails/12.jpg)
![Page 13: Esame di Elementi di Grafica Digitale Prof. Matjaz Hmeljak Marco Bacer 12 gennaio 2009](https://reader037.vdocuments.pub/reader037/viewer/2022103113/5542eb50497959361e8bfe73/html5/thumbnails/13.jpg)
Se nella figura avremmo dovuto controllare ogni coppia di palline, ci saremmo trovati con 105 paia di palline su cui effettuare il controllo
Controllando invece le collisioni in ognuno dei quadrati più piccoli, troviamo soltanto 3 + 3 + 15 + 10 = 31 paia di palline
![Page 14: Esame di Elementi di Grafica Digitale Prof. Matjaz Hmeljak Marco Bacer 12 gennaio 2009](https://reader037.vdocuments.pub/reader037/viewer/2022103113/5542eb50497959361e8bfe73/html5/thumbnails/14.jpg)
Nella versione 3D, il procedimento è analogo
Il cubo viene diviso in 8 cubi più piccoli Ogni cubo a sua volta può essere
ulteriormente diviso in 8 cubi più piccoli È possibile iterare questo procedimento
indefinitamente ma è necessario porre un limite per evitare coppie duplicate
![Page 15: Esame di Elementi di Grafica Digitale Prof. Matjaz Hmeljak Marco Bacer 12 gennaio 2009](https://reader037.vdocuments.pub/reader037/viewer/2022103113/5542eb50497959361e8bfe73/html5/thumbnails/15.jpg)
La suddivisione dello spazio nella maniera descritta può essere rappresentata con una struttura ad albero chiamata octree (ogni cubo è un nodo, che, se viene diviso, avrà otto figli)
L’equivalente 2D dell’octree si chiama quadtree(quattro figli)
![Page 16: Esame di Elementi di Grafica Digitale Prof. Matjaz Hmeljak Marco Bacer 12 gennaio 2009](https://reader037.vdocuments.pub/reader037/viewer/2022103113/5542eb50497959361e8bfe73/html5/thumbnails/16.jpg)
![Page 17: Esame di Elementi di Grafica Digitale Prof. Matjaz Hmeljak Marco Bacer 12 gennaio 2009](https://reader037.vdocuments.pub/reader037/viewer/2022103113/5542eb50497959361e8bfe73/html5/thumbnails/17.jpg)
Utilizzando il quadtree per individuare le potenziali collisioni, vediamo che queste sono scese da 31 a 15
Suddividere troppo lo spazio porta le palline ad apparire in più cubi
Per evitare questo fenomeno è necessario porre un limite alla profondità dell’albero
![Page 18: Esame di Elementi di Grafica Digitale Prof. Matjaz Hmeljak Marco Bacer 12 gennaio 2009](https://reader037.vdocuments.pub/reader037/viewer/2022103113/5542eb50497959361e8bfe73/html5/thumbnails/18.jpg)
![Page 19: Esame di Elementi di Grafica Digitale Prof. Matjaz Hmeljak Marco Bacer 12 gennaio 2009](https://reader037.vdocuments.pub/reader037/viewer/2022103113/5542eb50497959361e8bfe73/html5/thumbnails/19.jpg)
![Page 20: Esame di Elementi di Grafica Digitale Prof. Matjaz Hmeljak Marco Bacer 12 gennaio 2009](https://reader037.vdocuments.pub/reader037/viewer/2022103113/5542eb50497959361e8bfe73/html5/thumbnails/20.jpg)
Una volta trovate le coppie di palline che potrebbero collidere si controlla se effettivamente hanno colliso
Se collidono, le palline rimbalzano l’una contro l’altra
La fisica dell’urto è stata realizzate per essere il più reale possibile
![Page 21: Esame di Elementi di Grafica Digitale Prof. Matjaz Hmeljak Marco Bacer 12 gennaio 2009](https://reader037.vdocuments.pub/reader037/viewer/2022103113/5542eb50497959361e8bfe73/html5/thumbnails/21.jpg)
Trovo il vettore che servirà come base x e lo normalizzo
Calcolo le componenti rispetto al vettore x (appena trovato) e y (perpendicolare a x) della velocità
![Page 22: Esame di Elementi di Grafica Digitale Prof. Matjaz Hmeljak Marco Bacer 12 gennaio 2009](https://reader037.vdocuments.pub/reader037/viewer/2022103113/5542eb50497959361e8bfe73/html5/thumbnails/22.jpg)
Si esegue la stessa procedimento anche sull’altra sfera.
Applicando le leggi di Newton ottengo:
Segue il codice corrispondente a quanto appena illustrato
![Page 23: Esame di Elementi di Grafica Digitale Prof. Matjaz Hmeljak Marco Bacer 12 gennaio 2009](https://reader037.vdocuments.pub/reader037/viewer/2022103113/5542eb50497959361e8bfe73/html5/thumbnails/23.jpg)
![Page 24: Esame di Elementi di Grafica Digitale Prof. Matjaz Hmeljak Marco Bacer 12 gennaio 2009](https://reader037.vdocuments.pub/reader037/viewer/2022103113/5542eb50497959361e8bfe73/html5/thumbnails/24.jpg)
L’urto tra pallina e muro è di realizzazione molto più semplice
![Page 25: Esame di Elementi di Grafica Digitale Prof. Matjaz Hmeljak Marco Bacer 12 gennaio 2009](https://reader037.vdocuments.pub/reader037/viewer/2022103113/5542eb50497959361e8bfe73/html5/thumbnails/25.jpg)
d è la velocità prima dell’urto d-2s è la velocità dopo l’urto Per trovare s, trovo la “direzione”
muro e poi calcolo il prodotto scalare tra velocità iniziale e direzione
![Page 26: Esame di Elementi di Grafica Digitale Prof. Matjaz Hmeljak Marco Bacer 12 gennaio 2009](https://reader037.vdocuments.pub/reader037/viewer/2022103113/5542eb50497959361e8bfe73/html5/thumbnails/26.jpg)
![Page 27: Esame di Elementi di Grafica Digitale Prof. Matjaz Hmeljak Marco Bacer 12 gennaio 2009](https://reader037.vdocuments.pub/reader037/viewer/2022103113/5542eb50497959361e8bfe73/html5/thumbnails/27.jpg)
![Page 28: Esame di Elementi di Grafica Digitale Prof. Matjaz Hmeljak Marco Bacer 12 gennaio 2009](https://reader037.vdocuments.pub/reader037/viewer/2022103113/5542eb50497959361e8bfe73/html5/thumbnails/28.jpg)
Object-Object intersectionhttp://www.realtimerendering.com/intersections.html
Collision detection – NeHe tutorialhttp://nehe.gamedev.net/data/lessons/lesson.asp?lesson=30
Collision detection & Response – Peroxide tutorialhttp://www.peroxide.dk/download/tutorials/tut10/pxdtut10.html
Collision detection – Videotutorialsrock tutorialhttp://www.videotutorialsrock.com/opengl_tutorial/collision_detection/text.php
Simple Sphere-Sphere Collision Detection and Collision Responsehttp://wp.freya.no/simple-sphere-sphere-collision-detection-and-collision-response/comment-page-1#comment-6713
Collision detection – Wikipediahttp://en.wikipedia.org/wiki/Collision_detection
Bounding volume – Wikipediahttp://en.wikipedia.org/wiki/Bounding_volume
Octree – Wikipediahttp://en.wikipedia.org/wiki/Octree
How can I perform collision detection with OpenGL? – OpenGL FAQhttp://www.opengl.org/resources/faq/technical/miscellaneous.htm