Modo migliore / efficiente per implementare una collisione 3d


16

Ho già programmato un sistema di collisione basato su 2d per un gioco precedente. È stato il mio primo sistema di collisione ed è stato brutto. Stavo cercando una collisione tra gli 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 passare in rassegna tutti i miei oggetti in un mondo 3d.

Risposte:


11

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

Successivamente è possibile circondare i modelli ecc. Con sfere di delimitazione in cui si adattano perfettamente poiché una collisione tra sfere di delimitazione è molto facile da calcolare. Dopo aver saputo che due sfere di delimitazione si scontrano, è possibile rimpicciolire iterativamente le sfere di delimitazione e aggiungere sfere di delimitazione per mantenere l'oggetto coperto in esse, oppure noi un altro algoritmo intelligente per calcolare le collisioni tra due oggetti complessi.

Vedi questa immagine: sfere multiple di delimitazione


12

In definitiva, penso che la risposta alla tua domanda dipenderà dalle esigenze della tua particolare applicazione, in quanto non esiste una soluzione adatta a tutte le dimensioni. Sebbene ci siano un numero di risorse decenti sul web, ti risparmierai molto tempo e frustrazione raccogliendo il rilevamento delle collisioni in tempo reale di Christer Ericson , che espone in dettaglio una vasta gamma di tecniche e algoritmi, ad esempio Codice C ++.

Mi ha aiutato a fare piccoli passi prima di iniziare a provare a costruire un grande sistema. Scrivere una funzione per determinare se un punto si trova su un piano, quindi se un punto si trova in un triangolo, se un raggio si trova in un triangolo, ecc. Quindi passare a test statici di vari solidi convessi: AABB vs. Triangolo, ecc. Con le cose che sembravano impenetrabili (perdona il gioco di parole) all'inizio diventarono meno scoraggianti. Ecco un elenco di un buon numero di test, con un codice di esempio:

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

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

  • Partizionamento spaziale, Octrees, Quadtrees, alberi BSP
  • Alberi BIH
  • Volumi vincolanti e gerarchie di volumi limitanti
  • Rilevamento di collisioni discreto vs. continuo
  • Teorema dell'asse di separazione
  • Algoritmo GJK
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.