Bästa / effektiva sättet att implementera en 3D-kollision

Jag har redan programmerat ett 2d-baserat kollisionssystem för ett tidigare spel. Det var mitt första kollisionssystem och det var ful. Jag letade efter kollision mellan objekt genom att kontrollera alla objekt med alla objekt. Jag har redan hört talas om ett rutnät med celler där ett objekt bara ser kollisionen med andra objekt från dess nuvarande cell (er). Är det verkligen ett bra sätt att kontrollera kollision?

Jag skulle vilja ha en bra teknik för att slinga igenom alla mina föremål i en 3d-värld.

Svar

Du kommer att behöva en bra rymdpartitioneringsalgoritm, som vanligtvis används i 3D är octrees .

Därefter kan du omge modeller etc med avgränsande sfärer där de passar snyggt eftersom en kollision mellan avgränsande sfärer är väldigt lätt att beräkna. När du vet att två avgränsande sfärer kolliderar kan du antingen iterativt göra avgränsningssfärerna mindre och lägga till avgränsande sfärer för att hålla objektet täckt i dem, eller så kan vi använda en annan smart algoritm för att beräkna kollisioner mellan två komplexa objekt. den här bilden: flera avgränsande sfärer

Svar

I slutändan tror jag att svaret till din fråga kommer att bero på behoven hos din specifika applikation, eftersom det inte finns en lösning som passar alla. Även om det finns ett antal anständiga resurser på nätet, kommer du att spara mycket tid frustration genom att plocka upp Christer Ericson ”s Kollisionsdetektering i realtid , som i detalj anger en mängd olika tekniker och algoritmer, med exempel C ++ -kod.

Det hjälpte mig att ta steg för barn innan jag hoppade in i att försöka bygga ett storsystem. Att skriva en funktion för att avgöra om en punkt ligger i ett plan, n om en punkt är i en triangel, om en stråle är i en triangel etc. Sedan går man vidare till statiska tester av olika konvexa fasta ämnen: AABB vs. Triangel, etc. Med tiden blev saker som verkade ogenomträngliga (förlåt ordlek) först mindre skrämmande. Här är en lista över ett stort antal tester, med exempelkod:

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

Under tiden, eftersom jag vet att inte alla bara kan dela ut 70-80 $ för en bok efter eget val, här är några termer du kanske vill titta på:

  • Spatial Partitioning, Octrees, Quadtrees, BSP trees
  • BIH Trees
  • Bounding Volumes and Bounding Volume Hierarchies
  • Diskret vs. kontinuerlig kollisionsdetektion
  • Separera axelteori
  • GJK-algoritm

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *