Wednesday, January 25, 2012

Vaatenurga matemaatikast


Kahemõõtmelise näitamisel sõltub nähtu objektide osade koordinaatidest ja täiendavalt ekraanile antud mõõtudest. 
Näiteks ülanäites pandi ekraani mõõtudeks ( Xwmin, Xwmax, Ywmin, Ywmax ) selles näites (-30,+30,-15,+15). Selles vaateväljas asub lihtsustatult joonistatud maja, mille osad on seotud kindlate koordinaatidega. 
Vaatevälja "suurendamisel" (näiteks Set_window( -60, +60, -30, +30 ) ) suurendatakse vaatevälja ääri, mis põhjustab vaateväljas koordinaatidega seotud objektide näiliselt väiksemaks jäämist. Suurendamisel lihtsalt vähendatakse vaatevälja suurust ja objektid paistavad proportsionaalselt suuremalt.
A. Set_window(-40, +20,-15,+15) B.Set_window(-20,+40,-15,+15)
Ekraanil oleva nihutamist saab korraldada ekraani äärte koordinaatide nihutamisel. Näiteks internetis teksti ülalt alla sirvides vähendatakse järjest vertikaalsete koordinaatide väärtust (maksimum ja miinimum muutuvad võrdselt näiteks +1 või -1 jagu) tehes ühes ekraani servas sama palju nähtavaks kui ekraani vastasservast kaduma läks muutmata korraga nähtava ala suurust.  

3D


Kauguse kasvuga kaasnev objekti näiliste mõõtude langus on lihtsasti arvutatav. Kui kaugus kasvab 2 korda, siis väheneb selle näiline kõrgus ja laius 2 korda ning näiline pindala 4 korda. Teiste kauguste puhul on see seosega:  
h on näiline kõrgus või laius, d kaugus objekti ja vaatleja vahel, a on nähtu reaalne kõrgus või laius.

3D stseeni animeerimisel arvestab arvuti objektide asukohtadega ning nähtu sõltub vaatenurgast. Akent läbi mille ekraani vaataja seda stseeni näeb nimetatakse virtuaalse ekraaniks ning täiendavalt arvestatakse kus kohas võib vaataja olla ekraani suhtes, et arvutada välja nähtava vaatenurga äärealad.
Virtuaalne ekraan on siin tähistatud PP'ga ja vaataja oletuslik asukoht COP'ga. Kaugus on tihti väljendatud Z teljega. Näha on valemid ekraanil nähtava mõõtude arvutamiseks. Objekti reaalsed mõõdud on x ja y kuid nende näilised suurused (xp ja yp) lähevad ekraanile.




3D graafikas peab protsessor leidma täpsemalt ainult ekraanil paistma hakkavad objektid. Üheks võimaluseks on ray tracing, kus igale pikslile vastavast alast tõmmatakse alates oletuslikust vaatepunktist läbi virtuaalse ekraani mõtteline joon esimese nähtava objektini ning võetakse sealt värvi ja heleduse väärtus. Paljude kiirte tõttu võib paralleelselt kasutada kasvõi iga piksli jaoks eraldi protsessorit kuni need omavad ühiseid andmeid objektide asukohtadest.
Kuna tavaliselt on ka varjud olulised, siis tõmmatakse selle esimese nähtava objekti punktist uus kiir valgusallika suunas. Kui kiir jõuab valgusallikani, siis lisatakse objektile vastavalt valgust. Valguse intentsiivsus langeb seosega kaugus ruudus ning piisavalt kauge valgusallika valgust ei pea arvestama, kuna pikslil on piiratud arv valgustatuse väärtuseid.
Distantsi valem kahe 3d ruumis oleva punkti vahel.
Kui valguskiirele jääb midagi läbipaistmatut ette, siis on tegemist varjutatud alaga ning piksel jäetakse tumedamaks.  



Peegelduva pinna puhul peegeldub nähtavat otsiv kiir pinnalt langemisnurgaga sama nurga all edasi esimese uue nähtava objekti pinnani ning sealt võetakse värvid ning tumedus, mida peegelduval pinnal näidata.

Veidi sarnane olukord on realistlikuma valgustuse animeerimisel, sest valgustatud värvilised objektid värvivad veidi teisi enda lähedal olevaid objekte. Kui pind ei ole peegel, siis saadetakse palju kiiri lähimate objektideni ja võetakse umbkaudne keskmine värvikuma, mis nendelt peegeldub kuid kaugeltki mitte nii detailselt kui peegelpinna simuleerimisel. 


Läbipaistvate objektide nagu klaasi läbimisel arvestatakse virtuaalse murdumisnäitajaga, et anda realistlik imitatsioon valguse kõrvalekaldest. Aeganõudvamates simulatsioonides arvestatakse erinevate lainepikkustega (lühema lainepikkusega valgus nagu sinine kaldub vähem kõrvale kui pikem lainepikkus).
Kõrvalekallet saab arvutada füüsikas kehtiva Snell'i seadusega, kus murdumisnäitajate suhe kahe keskkonna vahel on seoses mõlemas keskkonnas oleva valguskiirte nurkade (nurk võetakse mõlemal sama sirge suhtes) siinuste suhtega.

Osades mängudes kasutatakse täiendava kiirusefekti lisamiseks nähtu venitamist piki liikumissuunda (sirgel liikumissihist vaatajani). Teel sõites jätab see mulje nagu veniks tee pikemaks kuid reaalne läbimisaeg sellest ei muutu ning kasvab ainult näiline kiirus.


No comments:

Post a Comment