Sisukord:

3D -vaataja: 4 sammu
3D -vaataja: 4 sammu

Video: 3D -vaataja: 4 sammu

Video: 3D -vaataja: 4 sammu
Video: Как самому понять, какой вы мерности. Из какого вы измерения: 3D, 4D или 5D? 2024, November
Anonim
3D -vaataja
3D -vaataja

Tere! Et rahuldada oma huvi programmeerimise vastu ja loodetavasti aidata rahuldada teie oma, tahaksin teile näidata 3D -vaatajat, mille kodeerisin javascripti. Kui soovite 3D -mängudest paremini aru saada või isegi oma 3D -mängu luua, sobib see 3D -vaataja prototüüp teile ideaalselt.

Samm: teooria

Teooria
Teooria

Selle 3D -vaataja teooria mõistmiseks võite lihtsalt uurida, kuidas te oma ümbrust vaatate (see aitab ainult ühe olulise valgusallika olemasolul). Märka seda:

  1. Sinust kaugemal asuvad objektid võtavad väiksema osa teie vaateväljast.
  2. Valgusallikast kaugemal asuvad objektid tunduvad tumedamad.
  3. Kui pinnad muutuvad valgusallikaga paralleelsemaks (vähem risti), tunduvad need tumedamad.

Otsustasin kujutada nägemisvälja, kus on hunnik jooni, mis tulenevad ühest punktist (analoogselt silmamunaga). Nagu piikpall, peavad jooned olema ühtlaselt paigutatud, et tagada nägemisvälja iga osa võrdne esindatus. Pange ülaltoodud pildil tähele, kuidas teravikuulist tulevad jooned lähevad palli keskpunktist kaugemale liikudes üksteisest kaugemale. See aitab visualiseerida programmi 1. vaatluse rakendamist, kuna joonte tihedus väheneb, kui objektid liiguvad keskpunktist kaugemale.

Jooned on programmi nägemise põhiühik ja igaüks neist on kaardistatud ekraanil oleva piksliga. Kui joon lõikub objektiga, värvitakse selle vastav piksel, lähtudes selle kaugusest valgusallikast ja nurgast valgusallikast.

2. samm: rakendamise teooria

Rakendamise teooria
Rakendamise teooria

Programmi lihtsustamiseks on valgusallikas sama, mis keskpunkt (silmamuna: punkt, kust kaarti vaadatakse ja kust jooned pärinevad). Analoogselt valguse hoidmisega otse näo kõrval kõrvaldab see varjud ja võimaldab iga piksli heledust palju lihtsamalt arvutada.

Programm kasutab ka sfäärilisi koordinaate, mille keskpunkt on vaatepunkt. See võimaldab jooni hõlpsalt genereerida (igaühel on ainulaadne teeta: horisontaalnurk ja phi: vertikaalne nurk) ning see on arvutuste alus. Sama teetaga jooned kaardistatakse sama rea piksliteks. Vastavate nurkade phis suureneb igas pikslireas.

Matemaatika lihtsustamiseks koosneb 3D-kaart lennukitest, millel on ühine muutuja (ühine x, y või z), ülejäänud kaks mitte-tavalist muutujat on piiratud vahemikus, täites iga tasapinna määratluse.

Hiirega ringi vaatamiseks arvestavad programmi võrrandid sfäärilise ja xyz -koordinaatsüsteemi vahelise teisendamise ajal vertikaalses ja horisontaalses pöörlemises. Selle tulemuseks on nägemisjoonte komplekti "spike ball" pöörlemise eelvormistamine.

3. samm: matemaatika

Järgmised võrrandid võimaldavad programmil määrata, millised read lõikavad iga objekti ja teavet iga ristmiku kohta. Tuletasin need võrrandid sfääriliste põhikoordinaatide võrranditest ja 2D pöörlemisvõrranditest:

r = kaugus, t = teeta (horisontaalne nurk), p = phi (vertikaalne nurk), A = pöörlemine ümber Y -telje (vertikaalne pöörlemine), B = pöörlemine ümber Z -telje (horisontaalne pöörlemine)

Kx = (sin (p)*cos (t)*cos (A)+cos (p)*sin (A))*cos (B) -sin (p)*sin (t)*sin (B)

Ky = (sin (p)*cos (t)*cos (A)+cos (p)*sin (A))*sin (B)+sin (p)*sin (t)*cos (B)

Kz = -sin (p)*cos (t)*sin (A)+cos (p)*cos (A)

x = r*Kx

y = r*Ky

z = r*Kz

r^2 = x^2+y^2+z^2

valgustus = Klight/r*(Kx või Ky või Kz)

p = arccos ((x*sin (A)*cos (B)+y*sin (A)*sin (B)+z*cos (A))/r)

t = arccos ((x*cos (B)+y*sin (B) -p*sin (A)*cos (p))/(r*cos (A)*sin (p)))

Samm 4: Programmeerimine

Programm
Programm

Loodan, et see 3D -vaataja prototüüp aitas teil mõista 3D -virtuaalse reaalsuse toimimist. Täiendades ja kodeerides on sellel vaatajal kindlasti potentsiaali 3D mängude arendamisel kasutada.

Soovitan: