3D pelien törmäyksen tunnistus

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?
5408
Äänestä

Muut lukivat myös

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 :)

Äänestä
  • "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ä..

    Äänestä

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)

Äänestä
  • 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
    }
    }

    Äänestä

  • iida kirjoitti:

    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ö?

    Äänestä

Kommentoi aloitusta


Nuppi sekaisin kirjoitti:

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?

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu