Tietoja 3D-mallien koordinaattimuunnoksesta
aine
Ennen kaikkea
Saatat usein nähdä 3D-kuvia TV-ruuduilla ja pelien näytöillä, mutta miten näytät 3D-tilassa olevia objekteja, kuten näytöllä liikkuvia hahmoja ja rakennuksia, 2D-näytöllä?
2D-peleissä koordinaattiarvoina on vain kaksiulotteisia elementtejä "X ja Y", ja näyttö on myös 2D, joten jos piirrät objektin määrittämällä X: n ja Y: n koordinaattisijainnin, ymmärrät intuitiivisesti, miten se piirretään mihin paikkaan.
3D:ssä se ei kuitenkaan ole niin helppoa. Kuten nimestä voi päätellä, 3D on "3-ulotteinen" ja siinä on kolme koordinaattitietoa: "X, Y ja Z". Koska koordinaatit eroavat 2D-näytöstä, kohdetta ei ole mahdollista piirtää sellaisenaan.
Sitten mitä tehdä, on "muuntaa kolmiulotteinen tieto kaksiulotteiseksi tiedoksi". Tätä kutsutaan yleisesti "koordinaattimuunnokseksi". Muista, että tämä koordinaattimuunnos on välttämätön 3D-ohjelmoinnille.
3D: n muuntamiseksi 2D: ksi on olemassa useita koordinaattimuunnoksia, mutta ohjelmoijat käsittelevät kolmea päätyyppiä koordinaattimuunnoksia: "maailman muutos", "näkymämuunnos" ja "projektiomuunnos". Tässä selitämme kaiken, mikä liittyy koordinaattimuutokseen.
Vasen- ja oikeakätiset koordinaattijärjestelmät
3D: ssä on kaksi koordinaattijärjestelmää, "vasenkätinen koordinaattijärjestelmä" ja "oikeanpuoleinen koordinaattijärjestelmä", joilla on eri suunnat kullekin koordinaatille alla olevan kuvan mukaisesti.
Direct3D käytti ensisijaisesti vasenkätistä koordinaattijärjestelmää, mutta oikeakätisten koordinaattijärjestelmien laskentaan on myös toimintoja. XNA tarjoaa kuitenkin laskentamenetelmiä vain oikeakätisille koordinaattijärjestelmille. Tämä näyttää olevan linjassa sen tosiasian kanssa, että muut sovellukset käyttävät usein oikeakätisiä koordinaattijärjestelmiä.
Kaikki tämän sivuston XNA-vinkit käyttävät oikeakätistä koordinaattijärjestelmää.
Paikallinen koordinaattijärjestelmä (mallikoordinaattijärjestelmä)
Jokaisella mallilla on koordinaattijärjestelmä, joka keskittyy alkuperään. Kun luot mallia mallinnusohjelmistolla, mielestäni on helpompi ymmärtää, jos kuvittelet luovasi sen alkuperän keskellä.
Maailman koordinaattijärjestelmä
Maailman koordinaattijärjestelmän avulla voit sijoittaa mallin mihin tahansa. Jos et tee mitään tässä maailman muutoksessa, malli sijoitetaan alkuperään samalla tavalla kuin paikalliset koordinaatit. Sijoitus ei ole vain siirtyä alkuperästä, vaan myös kiertää ja skaalata.
Näytä koordinaattijärjestelmä
Kun olet sijoittanut mallin maailman koordinaatteihin, tarvitset tietoa siitä, mihin katsot ja missä katsot 3D-avaruutta. Tätä kutsumme "näkymämuunnoksiksi". Näkymämuunnokset esitetään yleensä usein kameroina.
Tähän muuntamiseen tarvittavat parametrit ovat "kameran sijainti", "kameran kiinnostava kohde" ja "kameran suunta ylöspäin". Kameran suunta määräytyy näiden kolmen parametrin perusteella. Alla olevassa kuvassa kamera näkyy kolmannen osapuolen näkökulmasta.
Alla oleva kuva nähdään itse asiassa kameran näkökulmasta yllä olevassa kuvassa esitetyllä järjestelyllä (tässä vaiheessa emme ole vielä muuntaneet koordinaatteja näytölle, joten se on vain kuva).
Edellisessä selityksessä näyttää siltä, että kamera on sijoitettu ja koordinaatit muunnetaan, mutta varsinaisessa laskennassa maailman koordinaatit muunnetaan kameran sijainnin ja suunnan mukaan. Siksi alkuperä on kameran sijainti alla olevan kuvan mukaisesti.
Projektiivinen koordinaattijärjestelmä
Kun olet päättänyt, mistä paikasta katsot 3D-tilaa, seuraava vaihe on käsitellä "kaukana olevien pienten esineiden" ja "lähellä olevien suurten asioiden" näyttö. Tätä kutsutaan projektiiviseksi muunnokseksi. Projisointimuunnosmenetelmiä on kaksi, "perspektiiviprojektio" ja "ortografinen projektio", mutta yleisesti käytetty "perspektiiviprojektio" -kuva on seuraava.
Perspektiiviprojektio käyttää seuraavia parametreja: katselukulma, kuvasuhde, leikkeen sijainti eteenpäin ja takaleikkeen sijainti. Yllä olevassa kuvassa merkitty alue "frustum" ilmestyy lopulta näytölle.
"Katselukulma" määrittää kamerasta näkyvän katselualueen. Kulman pienentäminen lähentää, kasvattaminen loitontaa. Katselukulma on frustumin pystysuora arvo.
Kuvasuhdetta käytetään vaakasuuntaisen kuvakulman määrittämiseen, kun taas katselukulma on pystysuora kulma. Vaakakulma määräytyy yleensä "katselukulman × kuvasuhteen" mukaan, ja kuvasuhde on pohjimmiltaan näytettävän näytön "leveyden ÷ korkeuden" arvo. Jos muutat tätä arvoa, näytetty 3D-objekti näyttää venyvän vaaka- tai pystysuunnassa.
Pidikkeen etuasento ja takapidikkeen sijainti määritetään määrittämään, näytetäänkö objekti etu- vai taka-alueella. Tietokoneen luonteen vuoksi ei ole mahdollista näyttää äärettömyyteen, joten asetamme rajan. Tämä arvo vaikuttaa myös Z-puskurin tarkkuuteen, joten sitä ei suositella sisällytettäväksi piirustusalueelle alueen ulkopuolelle, jota ei tarvitse näyttää.
Perspektiivimuunnettu objekti muunnetaan alla olevan kaltaiseksi tilaksi. Kameran lähellä olleet kohteet zoomataan lähemmäs ja kaukana olleet kohteet pienennetään.
Tätä havainnollistetaan alla olevassa helposti ymmärrettävässä kaaviossa.
Jos katsot sitä todella kameran näkökulmasta, se näyttää alta.
Toinen projektiivisen muunnoksen menetelmä on ortografinen projektio, joka projisoi alla olevan kaltaisen näkyvän alueen. Koska leveys ja korkeus ovat vakioita syvyydestä riippumatta, kohteen koko ei muutu syvyyden mukaan.
Näytön koordinaattijärjestelmä
Projisointimuunnoksen jälkeen se muunnetaan todellisen näytön koordinaateiksi. Vaikka kyseessä on näyttö, näytön sijainti ja alue muuttuvat laitteeseen asetettujen näyttöikkunan asetusten mukaan. Pelien tapauksessa ikkunan asiakaskoordinaatit ovat kuitenkin usein näyttöikkuna sellaisenaan, joten mielestäni sinun ei tarvitse huolehtia liikaa.
Näytön koordinaatit (0, 0) muunnetaan projektiokoordinaateista (-1, 1, z). Samoin näytön koordinaatit (leveys, korkeus) muunnetaan projektiokoordinaateista (1, -1 ,z).