Modo migliore / efficiente per implementare una collisione 3d

Ho già programmato un sistema di collisione basato su 2d per un gioco precedente. Era il mio primo sistema di collisione e era brutto. Stavo cercando la collisione tra oggetti controllando tutti gli oggetti con tutti gli oggetti. Ho già sentito parlare di un sistema a griglia con celle in cui un oggetto guarderà solo la collisione con altri oggetti dalle sue celle attuali. È davvero un buon modo per controllare la collisione?

Mi piacerebbe avere una buona tecnica per scorrere tutti i miei oggetti in un mondo 3D.

Risposta

Avrai bisogno di un buon algoritmo di partizionamento dello spazio, comunemente usato in 3D sono octrees .

Dopodiché potresti circondare i modelli ecc. con sfere di delimitazione in cui si adattano perfettamente perché una collisione tra le sfere di delimitazione è molto facile da calcolare. Dopo aver appreso che due sfere di delimitazione entrano in collisione, è possibile ridurre iterativamente le sfere di delimitazione e aggiungere sfere di delimitazione per mantenere loggetto coperto da esse, oppure utilizzare un altro algoritmo intelligente per calcolare le collisioni tra due oggetti complessi.

Vedere questa immagine: sfere di delimitazione multiple

Risposta

In definitiva penso che la risposta alla tua domanda dipenderà dalle esigenze della tua particolare applicazione, in quanto non esiste “una soluzione valida per tutti. Anche se sul Web sono disponibili numerose risorse decenti, risparmierai molto tempo e frustrazione rilevando il Real-time Collision Detection di Christer Ericson, che espone in grande dettaglio unampia varietà di tecniche e algoritmi, con codice C ++ di esempio.

Mi ha aiutato a fare piccoli passi prima di iniziare a provare a costruire un grande sistema. Scrivendo una funzione per determinare se un punto è in un piano, il n se un punto è in un triangolo, se un raggio è in un triangolo, ecc. Quindi passare a test statici di vari solidi convessi: AABB vs Triangolo, ecc. Con il tempo le cose che sembravano impenetrabili (perdonate il gioco di parole) allinizio sono diventate meno scoraggiante. Di seguito è riportato un elenco di un buon numero di test, con codice di esempio:

http://www.realtimerendering.com/intersections.html

Nel frattempo, poiché so che non tutti possono sborsare a piacimento 70-80 $ per un libro, ecco alcuni termini che potresti voler esaminare:

  • Partizionamento spaziale, Octrees, Quadtrees, BSP trees
  • BIH Trees
  • Bounding Volumes e Bounding Volume Hierarchies
  • Rilevamento collisioni discreto e continuo
  • Teorema dellasse di separazione
  • Algoritmo GJK

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *