Općenito o sudaru

Sama implementacija sudara se sastoji od dva zasebna problema, a to su detekcija sudara (engl. collision detection) i reakcija na sudar (engl. collision response). Jedan od najpoznatijih, kao i najjednostavnijih tipova detekcije sudara je granična sfera. Uz njega postoje još granični cilindri i granične kutije.

Detekcija sudara pomoću graničnih sfera (engl. bounding spheres)

Kako je za ovaj projekt bilo potrebno prikazati implementaciju sudara između dviju kugli, odnosno sfera odabrao sam detekciju sudara pomoću graničnih sfera koja se savršeno uklapa. Oko objekta se omota sfera s najmanjim mogućim radiusom. Ako bilo koji objekt uđe unutar te sfere, smatra se da se dogodio sudar te na njega treba prikladno reagirati.

Sudar

U svakom koraku se provjerava ovo ograničenje na način da se provjerava udaljenost između središta dviju sfera. Kada imamo njihovu udaljenost, provjeravamo da li je ta udaljenost veća od zbroja njihovih radiusa. Ako je veća nije došlo do sudara, a ako je ta udaljenost manja ili jednaka znači da je došlo do sudara. Za zidove je princip isti te se za svaku kuglu provjerava da li njezino središte(položaj) uvećan za radius, dotiče ili prelazi koordinate zida.

Sudar

No ako imamo puno objekata, broj mogućih sudara se drastično povećava, tako primjerice za 10 000 objekata imamo 49 995 000 mogućih sudara koje moramo provjeriti. Zato se prostor u podijeli u segmente te se za sudare provjerava samo među segmentima u okolini objekta. Tako za objekt trebamo provjeriti 3 x 3 x 3 segmenta, a u segmentu se nalazi prosječno 10 objekata tada je broj mogućih sudara 36 500 što je veliko poboljšanje naspram 49 995 000.

Reakcija na sudar

Kod sudara možemo zamisliti da dva objekta imaju svaki svoju masu i svoju brzinu. Kada dođe do sudara između njih, oni se moraju odbiti drugom brzinom. Koristeći princip očuvanja energije koristimo sljedeću formulu kako bi izračunali brzine koje objekti imaju nakon sudara.

Sudar

Prema zakonu očuvanja energije, zbroj energija prije i poslije sudara mora biti jednaka, odnosno K1 + K2 = K'1 + K'2. Svaki objekt dobije svoju novu brzinu, te se njome nastavi kretati sve do sljedećeg sudara. Vektor brzine objekta V(x,y,z) predstavlja koliko se jedinica objekt pomakne po x i y osi u jednoj sceni.