Jeg har allerede programmeret et 2d-baseret kollisionssystem til et tidligere spil. Det var mit første kollisionssystem, og det var grim. Jeg ledte efter kollision mellem objekter ved at kontrollere alle objekter med alle objekter. Jeg har allerede hørt om et gittersystem med celler, hvor et objekt kun ser kollisionen med andre objekter fra dets nuværende celle (r). Er det virkelig en god måde at kontrollere kollision på?
Jeg vil gerne have en god teknik til at gennemløbe alle mine genstande i en 3d verden.
Svar
Du får brug for en god pladsopdelingsalgoritme, der almindeligvis bruges i 3D, er octrees .
Derefter kan du omgive modeller osv. med afgrænsende kugler, hvor de passer pænt, fordi en kollision mellem afgrænsende kugler er meget let at beregne. Når du ved, at to afgrænsende kugler kolliderer, kan du enten iterativt gøre afgrænsningssfærerne mindre og tilføje afgrænsende kugler for at holde objektet dækket af dem, eller os en anden smart algoritme til at beregne kollisioner mellem to komplekse objekter.
Se dette billede:
Svar
I sidste ende tror jeg svaret til dit spørgsmål vil afhænge af behovene i din specifikke applikation, da der ikke er en løsning, der passer til alle. Selvom der er en række anstændige ressourcer på nettet, sparer du dig meget tid og frustration ved at hente Christer Ericson “s Realtids kollisionsdetektering , som i detaljer viser en bred vifte af teknikker og algoritmer med eksempel C ++ kode.
Det hjalp mig med at tage skridt i babyen, før jeg sprang ind i et forsøg på at opbygge et storslået system. At skrive en funktion for at afgøre, om et punkt er i et plan, n hvis et punkt er i en trekant, hvis en stråle er i en trekant osv. Derefter bevæger man sig over på statiske test af forskellige konvekse faste stoffer: AABB vs. trekant osv. Med tiden blev ting, der syntes uigennemtrængelige (tilgiv ordspillet) først mindre skræmmende. Her er en liste over et stort antal tests med eksempelkode:
http://www.realtimerendering.com/intersections.html
I mellemtiden, da jeg ved, at ikke alle bare kan forkaste 70-80 $ for en bog efter ønske, her er nogle vilkår, du måske vil undersøge:
- Rumlig partitionering, Octrees, Quadtrees, BSP træer
- BIH-træer
- Afgrænsende volumener og afgrænsningsvolumenhierarkier
- Diskret vs. kontinuerlig kollisionsdetektion
- Adskillelse af aksesætning
- GJK-algoritme