Cel mai bun / eficient mod de a implementa o coliziune 3D

Am programat deja un sistem de coliziune bazat pe 2d pentru un joc anterior. A fost primul meu sistem de coliziune și a fost urât. Căutam coliziune între obiecte verificând toate obiectele cu toate obiectele. Am auzit deja despre un sistem de rețea cu celule în care un obiect va privi doar coliziunea cu alte obiecte din celulele sale curente. Este într-adevăr un mod bun de a verifica coliziunea?

Mi-ar plăcea să am o tehnică bună pentru a trece prin toate articolele mele într-o lume 3D.

Răspuns

Veți avea nevoie de un algoritm bun de partiționare a spațiului, utilizat în mod obișnuit în 3D sunt octrees .

După aceea, puteți înconjura modelele etc. cu sfere de delimitare în care se încadrează bine, deoarece o coliziune între sfere de delimitare este foarte ușor de calculat. După ce știți că două sfere de delimitare se ciocnesc, puteți fie să iterați sferele de delimitare mai mici și să adăugați sfere de delimitare pentru a menține obiectul acoperit în ele, fie noi un alt algoritm inteligent pentru a calcula coliziunile între două obiecte complexe. această imagine: mai multe sfere de delimitare

Răspuns

În cele din urmă, cred că răspunsul la întrebarea dvs. va depinde de nevoile aplicației dvs., deoarece nu există o soluție unică pentru toate. Deși există o serie de resurse decente pe web, vă veți economisi mult timp și frustrare prin preluarea lui Christer Ericson „s Detecție coliziune în timp real , care prezintă în detaliu o mare varietate de tehnici și algoritmi, cu un exemplu de cod C ++.

M-a ajutat să fac pași pentru bebeluși înainte de a intra în încercarea de a construi un sistem măreț. Scrierea unei funcții pentru a determina dacă un punct se află într-un plan, n dacă un punct se află într-un triunghi, dacă o rază se află într-un triunghi, etc. Apoi, trecerea la teste statice ale diferitelor solide convexe: AABB vs. Triunghi, etc. Cu timpul lucrurile care păreau impenetrabile (iartă jocul de cuvinte) au devenit la început mai puțin descurajant. Iată o listă cu un număr bun de teste, cu un exemplu de cod:

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

Între timp, de vreme ce știu că nu toată lumea poate purta 70-80 $ pentru o carte după bunul plac, iată câțiva termeni pe care ați putea dori să-i examinați:

  • Partiționare spațială, octree, arbori quadri, arbori BSP
  • Arbori BIH
  • Volumele de limitare și ierarhiile de volum de limitare
  • Detecție discretă vs. detectare continuă a coliziunilor
  • Teorema axei de separare
  • Algoritmul GJK

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *