Ajattelin vaan kysellä ihan uteliaisuuttani, että onko 3D-peleissä törmäyksen tunnistus toteutettu samalla tavalla kuin esim. kaksiulotteisissa, joissa verrataan eri kohteitten asemaa ruudulla x ja y -koordinaateilla, paitsi että sisällytetään syvyyssuunta mukaan? Kokeilin kerran miettiä minkälainen lauseke se olisi, mutta 2 rivin pituinen ehtolauseke ainoastaan kahden eri kappaleen törmäyksen tunnistukseen tuntui vähän järjenvastaiselta. Osaako ja jaksaako joku selittää mitä kaikkea täytyy laskea mukaan, jotta saisi esim. Blockout -tyylisen 3D-pelin törmäykset tarkistettua? Siis niin että maila on katsojan suunnassa ja pallo kimpoaa laatikon pohjalla olevista palikoista. Minkälaisia matemaattisia yhtälöitä tarvitaan että pallo kimpoaa seinistä ym. jotenkin realistisesti?
3D pelien törmäyksen tunnistus
Nuppi sekaisin
5408
0Äänestä
Muut lukivat myös
Odottaa vastausta
Näihin keskusteluihin ei ole vielä vastattu. Ole ensimmäinen.
Vastaukset 5
Vanhimmat
osuma hommasta en oikein osaa sanoa. kai sen pystyy jotenkin laskemaan helposti matriisien avulla.
"Minkälaisia matemaattisia yhtälöitä tarvitaan että pallo kimpoaa seinistä ym. jotenkin realistisesti?"
annetaan pallolle massa. sen avulla lasketaan törmäysenergiat/painovoima yms. ja tulokulma = lähtökulma. eli kannattaa vain miettiä mitä voimia(ja mihin suuntaan) vaikuttaa kun kappale liikkuu. (eli lukion fysiikan tunnit riittävät ihan hyvin)
tuli vaan mieleen että jännä pelata jotain aravuus 3d peliä missä avaruudessa on kitka ja räjähdykset kuuluvat. tosin olisi jännä ohjailla jotain alusta mikä pysähtyy vain oikean suuruisella vasta-voimalla ja muiden taivaankappaleiden veto-voima vaikuttaisi ohjailuun :)
"tuli vaan mieleen että jännä pelata jotain aravuus 3d peliä missä avaruudessa on kitka ja räjähdykset kuuluvat. tosin olisi jännä ohjailla jotain alusta mikä pysähtyy vain oikean suuruisella vasta-voimalla ja muiden taivaankappaleiden veto-voima vaikuttaisi ohjailuun :)"
Aijai kun tulee mahtava vanha peli mieleen nimeltä Warhead;). Siinä meni vähän aikaa että alusta oppi jotenkuten edes luontevasti ohjaamaan saati sitten vielä taistelemaan kautta telakoitumaan jotenkin kunnialla. Alustahan pysti kääntelemään akseliensa ympäri mutta massan hitaus liikutti alusta siihen suuntaan mihin se oli ennenkin menossa.. Nykyään ei näin hienoja pelejä tehdä kun se olisi liian vaikea oppia ja ei saisi tarpeeksi myyntiä välttämättä;)
Tosin tuosta ongelmasta en osaa sanoa muuta kuin että massalla ei taida olla mitään väliä kiiteistä seinistä pomppiessa mutta vain kun kaksi tai useampi kappale törmää toisiinsa ja liikemäärän tulee säilyä..
Eli lisäys tuohon edelliseen törmäystunnistukseen. Kuvitellaan siis että meillä on nelikulmainen maila sekä pallo. Mailan x, y ja z -koordinaatit ruudulla voitaisiin merkitä vaikka MRX, MRY, MRZ. Sitten otetaan huomioon mailan mitat, eli leveys, korkeus ja syvyys, MPX, MPY ja MPZ. Tehdään sama pallolle:
Pallo = PRX, PRY, PRZ ja mitat = PPX, PPY, PPZ.
(Jos vaikka kuvittelisimme, että X-akselin arvo kasvaisi oikealle, Y:n alas ja Z etäämmäs katsojasta. Origo olisi vaikka näytön ylävasen.)
Sitten kuvitellaan tilanne, jolloin pallo osuisi vaikka mailaan. Tarvitsemme tarkistukseen ehtolausekkeen (c ):
if ((PRX >= MRX) && ((PRY PPY)
Järkevintä on varmaan pelata mailan keskipisteellä (Mx,My,Mz) ja mailan leveydellä ja korkeudella (Mb,Mh). Pallolla taas on keskipiste (Px,Py,Pz) sekä säde Pr.
Siinä vaiheessa kun maila kohtaa pallon: pallo ja maila on samalla 'syvyydellä' eli abs(Mz-Pz) Mx-Mb && Px Pr < Mx Mb) || (Px-Pr > Mx-Mb && Px-Pr < Mx Mb)
{
if(sama y-suunnassa)
{
törmäys
}
}
No, ainakin ehtolauseke rauhoittui! :) Laskeminenkin taitaa olla nopeampaa tuolla tavalla, eikö?