Olen jo ohjelmoinut 2d-pohjaisen törmäysjärjestelmän edelliselle pelille. Se oli ensimmäinen törmäysjärjestelmäni ja se oli ruma. Etsin törmäystä kohteiden välillä tarkistamalla kaikki objektit kaikilla esineillä. Olen jo kuullut ruudukkojärjestelmästä solujen kanssa, joissa esine näyttää törmäyksen vain muihin kohteisiin nykyisistä soluistaan. Onko se todella hyvä tapa tarkistaa törmäys?
Haluaisin saada hyvän tekniikan silmukoiden läpi kaikki kohteet 3D-maailmassa.
Vastaa
Tarvitset hyvän avaruusosiointialgoritmin, jota käytetään yleisesti 3D: ssä, ovat oktrees .
Sen jälkeen voit ympäröivät mallit jne. rajoittavilla palloilla, joihin ne sopivat siististi, koska rajoittavien pallojen törmäys on helppo laskea. Kun tiedät, että kaksi rajoittavaa palloa törmää, voit joko tehdä iteratiivisesti rajoittavat pallot pienemmiksi ja lisätä rajoittavia palloja pitämään esine niiden peitossa, tai meille toisen älykkään algoritmin kahden monimutkaisen objektin törmäysten laskemiseksi.
Katso tämä kuva:
Vastaa
Viime kädessä mielestäni vastaus kysymykseesi riippuu tietyn sovelluksesi tarpeista, koska ei ole ”yhtä kokoa kaikille” -ratkaisua. Vaikka verkossa on useita ihmisarvoisia resursseja, säästät itsellesi paljon aikaa ja turhautuminen poimimalla Christer Ericson ”s Reaaliaikainen törmäystunnistus , jossa esitetään hyvin yksityiskohtaisesti monenlaisia tekniikoita ja algoritmeja, esimerkkinä C ++ -koodi. / p>
Se auttoi minua ottamaan vauvan askeleita ennen kuin ryhdyin yrittämään rakentaa suurta järjestelmää. Funktion kirjoittaminen sen määrittämiseksi, onko piste tasossa, n, jos piste on kolmiossa, jos säde on kolmiossa jne. Sitten siirrytään staattisiin testeihin, joissa on erilaisia kuperia kiinteitä aineita: AABB vs. kolmio jne. Ajan myötä asioista, jotka näyttivät läpäisemättömiltä (anteeksi sanaleikki), aluksi tuli vähemmän pelottava. Tässä on luettelo hyvistä määristä testejä, esimerkkikoodi:
http://www.realtimerendering.com/intersections.html
Koska tällä välin tiedän, että kaikki eivät voi vain maksaa 70-80 dollaria teoksesta haluamallasi tavalla, tässä on joitain termejä, joita kannattaa harkita:
- Spatial Partitioning, Octrees, Quadtrees, BSP trees
- BIH Trees
- Rajoittavat volyymit ja rajoittavat volyymihierarkiat
- Diskreetti vs. jatkuva törmäystunnistus
- Akselilauseen erottaminen
- GJK-algoritmi