Jeg har allerede programmert et 2d-basert kollisjonssystem for et tidligere spill. Det var mitt første kollisjonssystem og det var stygg. Jeg lette etter kollisjon mellom objekter ved å sjekke alle objekter med alle objekter. Jeg har allerede hørt om et rutenettsystem med celler der et objekt bare vil se kollisjonen med andre objekter fra sin nåværende celle (r). Er det virkelig en god måte å sjekke kollisjon på?
Jeg vil gjerne ha en god teknikk for å gå gjennom alle elementene mine i en 3d verden.
Svar
Du trenger en god romdelingsalgoritme, som ofte brukes i 3D er oktre .
Etter det kan du omslutte modeller osv. med avgrensende sfærer der de passer pent fordi det er veldig enkelt å beregne en kollisjon mellom avgrensende sfærer. Når du vet at to avgrensende kuler kolliderer, kan du enten gjøre avgrensningskulene iterativt mindre og legge til avgrensende kuler for å holde objektet dekket av dem, eller oss en annen smart algoritme for å beregne kollisjon mellom to komplekse objekter. dette bildet:
Svar
Til slutt tror jeg svaret til spørsmålet ditt kommer til å avhenge av behovene til din spesifikke applikasjon, da det ikke er en løsning som passer alle. Selv om det er en rekke anstendige ressurser på nettet, vil du spare deg for mye tid og frustrasjon ved å plukke opp Christer Ericson «s Sanntids kollisjonsdeteksjon , som i detalj presenterer et bredt utvalg av teknikker og algoritmer, med eksempel C ++ -kode.
Det hjalp meg å ta babysteg før jeg hoppet til å prøve å bygge et storslått system. Å skrive en funksjon for å avgjø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. Deretter går vi over på statiske tester av forskjellige konvekse faste stoffer: AABB vs. trekant, etc. Med tiden ble ting som virket ugjennomtrengelige (tilgi ordspillet) mindre skremmende. Her er en liste over et stort antall tester, med eksempelkode:
http://www.realtimerendering.com/intersections.html
I mellomtiden, siden jeg vet at ikke alle bare kan punge ut 70-80 $ for en bok etter eget ønske, er det noen ord du kanskje vil se på:
- Spatial Partitioning, Octrees, Quadtrees, BSP trees
- BIH Trees
- Bounding Volumes and Bounding Volume Hierarchies
- Diskret vs. kontinuerlig kollisjonsdeteksjon
- Separerende aksesetning
- GJK-algoritme