3D-mudelite koordinaatide teisendamise kohta

Lehekülg uuendatud :
Lehe loomise kuupäev :

aine

Esiteks

Võite sageli näha 3D-pilte teleriekraanidel ja mängude ekraanidel, kuid kuidas kuvada 2D-ekraanil 3D-ruumis eksisteerivaid objekte, näiteks ekraanil liikuvaid tegelasi ja hooneid?

2D-mängudes on koordinaatidena ainult "X ja Y" kahemõõtmelised elemendid ning ekraan on ka 2D, nii et kui joonistate objekti, täpsustades X ja Y koordinaatide asukoha, saate intuitiivselt aru, kuidas see millises asendis joonistatakse.

Kuid 3D-s pole see nii lihtne. Nagu nimigi ütleb, on 3D "3-mõõtmeline" ja sellel on kolm koordinaatteavet: "X, Y ja Z". Kuna koordinaadid erinevad 2D-ekraanist, ei ole võimalik objekti joonistada sellisena, nagu see on.

Siis, mida teha, on "teisendada kolmemõõtmeline teave kahemõõtmeliseks teabeks". Seda nimetatakse tavaliselt "koordinaadi teisenduseks". Pidage meeles, et see koordinaatide teisendamine on 3D-programmeerimise jaoks hädavajalik.

3D teisendamiseks 2D-ks on mitut tüüpi koordinaatide teisendusi, kuid programmeerijad tegelevad kolme peamise koordinaatide teisenduste tüübiga: "maailma ümberkujundamine", "vaate ümberkujundamine" ja "projektsiooni ümberkujundamine". Siin selgitame kõike, mis on seotud koordinaatide ümberkujundamisega.

Vasaku- ja parempoolsed koordinaatsüsteemid

3D-s on kaks koordinaatsüsteemi, "vasakpoolne koordinaatide süsteem" ja "parempoolne koordinaatide süsteem", millel on iga koordinaadi jaoks erinev suund, nagu on näidatud alloleval joonisel.

Direct3D kasutas peamiselt vasakukäelist koordinaatsüsteemi, kuid on olemas ka funktsioonid parempoolsete koordinaatsüsteemide arvutamiseks. Kuid XNA pakub arvutusmeetodeid ainult parempoolsete koordinaatsüsteemide jaoks. See näib olevat kooskõlas asjaoluga, et teised rakendused kasutavad sageli parempoolseid koordinaatsüsteeme.

Kõik selle saidi XNA näpunäited kasutavad parempoolset koordinaatide süsteemi.

Kohalik koordinaatide süsteem (mudelkoordinaatide süsteem)

Igal mudelil on päritolule keskendunud koordinaatide süsteem. Modelleerimistarkvaraga mudeli loomisel on minu arvates lihtsam mõista, kui kujutate ette, et loote selle keskpunktiks oleva päritoluga.

Maailma koordinaatide süsteem

Maailma koordinaatide süsteem võimaldab teil mudeli paigutada kõikjale. Kui te selles maailma ümberkujundamises midagi ei tee, paigutatakse mudel päritolule samamoodi nagu kohalikud koordinaadid. Paigutamine ei ole mitte ainult päritolust liikumine, vaid ka pööramine ja skaala.

Vaata koordinaatide süsteemi

Kui olete mudeli paigutanud maailma koordinaatidesse, vajate teavet selle kohta, kuhu vaatate ja kuhu vaatate 3D-ruumi. Seda me nimetame "vaate transformatsioonideks". Vaateteisendusi kujutatakse tavaliselt sageli kaameratena.

Selle teisendamise jaoks vajalikud parameetrid on "kaamera asukoht", "kaamera huvipunkt" ja "kaamera ülespoole suunatud suund". Kaamera orientatsiooni määravad need kolm parameetrit. Alloleval joonisel on kaamera näidatud kolmanda osapoole vaatenurgast.

Allolev joonis on tegelikult kaamera vaatenurgast nähtav ülaltoodud joonisel näidatud paigutusega (praegu pole me koordinaate veel ekraanile teisendanud, seega on see lihtsalt pilt).

Eelmises selgituses tundub, et kaamera on paigutatud ja koordinaadid teisendatakse, kuid tegelikus arvutuses teisendatakse maailma koordinaadid vastavalt kaamera asukohale ja orientatsioonile. Seetõttu on lähtepunktiks kaamera asukoht, nagu on näidatud alloleval joonisel.

Projektiivne koordinaatide süsteem

Kui olete otsustanud, millisest positsioonist 3D-ruumi vaadata, on järgmine samm töödelda "väikeste objektide kuvamist, mis on kaugel" ja "suured asjad, mis on lähedal". Seda nimetatakse projektiivseks ümberkujundamiseks. Projektsiooni teisendamiseks on kaks meetodit, "perspektiivprojektsioon" ja "ortograafiline projektsioon", kuid tavaliselt kasutatav "perspektiivprojektsiooni" pilt on järgmine.

Perspektiivprojektsioon kasutab järgmisi parameetreid: vaatenurk, kuvasuhe, ettepoole klambri asend ja tagumise klambri asend. Ülaltoodud joonisel märgistatud ala "frustum" ilmub lõpuks ekraanile.

"Vaatenurk" määrab kaamerast nähtava vaateulatuse. Nurga vähendamine suumib sisse, suurendades seda välja. Vaatenurk on frustumi vertikaalne väärtus.

Kuvasuhet kasutatakse horisontaalse vaatenurga määramiseks, samas kui vaatenurk on vertikaalnurk. Horisontaalnurga määrab tavaliselt "vaatenurga × kuvasuhe" ja kuvasuhe on põhimõtteliselt kuvatava ekraani laiuse ÷ kõrguse väärtus. Kui muudate seda väärtust, näib kuvatud 3D-objekt venivat horisontaalselt või vertikaalselt.

Määratud on Forward Clip Position (Ettepoole klambri asend) ja Rear Clip Position (Tagumise klipi asukoht), et määrata, kas objekt kuvatakse esi- või tagaosas. Arvuti olemuse tõttu ei ole võimalik lõpmatuseni kuvada, seega seame piiri. See väärtus mõjutab ka Z-puhvri täpsust, mistõttu ei ole soovitatav seda lisada joonistusalale, mis ületab vahemikku, mida ei ole vaja kuvada.

Perspektiivi teisendatud objekt teisendatakse ruumiks, nagu allpool. Kaamera lähedal olnud objekte suumitakse sisse ja kaugel asuvaid objekte vähendatakse.

Seda illustreerib allolev hõlpsasti mõistetav diagramm.

Kui vaatate seda tegelikult kaamera vaatenurgast, näeb see välja nagu allpool.

Teine projektiivse transformatsiooni meetod on ortograafiline projektsioon, mis projitseerib nähtava ala, nagu allpool. Kuna laius ja kõrgus on konstantsed, olenemata sügavusest, ei muutu objekti suurus sügavusega.

Ekraani koordinaatide süsteem

Pärast projektsiooni teisendamist teisendatakse see tegeliku ekraani koordinaatideks. Kuigi tegemist on ekraaniga, muutuvad ekraani asukoht ja ulatus sõltuvalt seadmes seatud vaateava sätetest. Kuid mängude puhul on akna kliendi koordinaadid sageli vaateava, nii et ma ei usu, et peate liiga palju muretsema.

Ekraani koordinaadid (0, 0) teisendatakse projektsioonikoordinaatidest (-1, 1, z). Samamoodi teisendatakse ekraani koordinaadid (laius, kõrgus) projektsioonikoordinaatidest (1, -1 ,z).