Satura rādītājs:

3D skatītājs: 4 soļi
3D skatītājs: 4 soļi

Video: 3D skatītājs: 4 soļi

Video: 3D skatītājs: 4 soļi
Video: Любовь на Два Полюса / Love Between Two Poles. Фильм. StarMedia. Мелодрама 2024, Jūlijs
Anonim
3D skatītājs
3D skatītājs

Sveiki! Lai apmierinātu manu interesi par programmēšanu un, cerams, palīdzētu apmierināt jūsu, es vēlos jums parādīt 3D skatītāju, ko esmu iekodējis javascript. Ja vēlaties uzlabot savu izpratni par 3D spēlēm vai pat izveidot savu 3D spēli, šis 3D skatītāja prototips ir lieliski piemērots jums.

1. solis: teorija

Teorija
Teorija

Lai saprastu šī 3D skatītāja teoriju, varat vienkārši izpētīt veidu, kā jūs skatāties uz savu apkārtni (tas palīdz, ja ir tikai viens nozīmīgs gaismas avots). Ievērojiet, ka:

  1. Objekti, kas atrodas tālāk no jums, aizņem mazāku redzes lauka daļu.
  2. Objekti, kas atrodas tālāk no gaismas avota, šķiet tumšāki.
  3. Tā kā virsmas kļūst arvien paralēlākas (mazāk perpendikulāras) gaismas avotam, tās šķiet tumšākas.

Es nolēmu attēlot redzes lauku ar virkni līniju, kas izriet no viena punkta (līdzīgi acs ābolam). Tāpat kā smailes bumbiņai, līnijām jābūt vienmērīgi izvietotām, lai nodrošinātu, ka katra redzes lauka daļa ir vienādi pārstāvēta. Iepriekš redzamajā attēlā ievērojiet, kā līnijas, kas nāk no smailes lodītes, attālinās no bumbas centra. Tas palīdz vizualizēt programmas 1. novērojuma īstenošanu, jo līniju blīvums samazinās, objektiem attālinoties no centra punkta.

Līnijas ir programmas redzes pamatvienība, un katra no tām displejā tiek kartēta uz pikseļu. Kad līnija krusto objektu, tā atbilstošais pikselis tiek iekrāsots, pamatojoties uz tā attālumu no gaismas avota un leņķi no gaismas avota.

2. solis: ieviešanas teorija

Īstenošanas teorija
Īstenošanas teorija

Lai vienkāršotu programmu, gaismas avots ir tāds pats kā centra punkts (acs ābols: punkts, no kura tiek skatīta karte un no kurienes nāk līnijas). Analoģiski gaismas turēšanai tieši pie sejas, tas novērš ēnas un ļauj daudz vieglāk aprēķināt katra pikseļa spilgtumu.

Programmā tiek izmantotas arī sfēriskās koordinātas, kuru centrā ir redzes punkts. Tas ļauj viegli izveidot līnijas (katrai no tām ir unikāla teta: horizontālais leņķis un phi: vertikālais leņķis) un nodrošina aprēķinu pamatu. Līnijas ar vienu un to pašu tetu tiek kartētas uz pikseļiem vienā rindā. Katrā pikseļu rindā palielinās atbilstošo leņķu phis.

Lai vienkāršotu matemātiku, 3D karti veido plaknes ar kopīgu mainīgo (kopīgs x, y vai z), bet pārējie divi neparastie mainīgie ir ierobežoti, aizpildot katras plaknes definīciju.

Lai paskatītos apkārt ar peli, programmas vienādojumi ņem vērā vertikālu un horizontālu rotāciju, konvertējot starp sfēriskajām un xyz koordinātu sistēmām. Tas rada rotācijas iepriekšēju veidošanos redzes līniju "smaiļbumbas" komplektā.

3. solis: matemātika

Šie vienādojumi ļauj programmai noteikt, kuras līnijas krusto katru objektu, un informāciju par katru krustojumu. Es atvasināju šos vienādojumus no pamata sfērisko koordinātu vienādojumiem un 2D rotācijas vienādojumiem:

r = attālums, t = teta (horizontālais leņķis), p = phi (vertikālais leņķis), A = rotācija ap Y asi (vertikālā rotācija), B = rotācija ap Z asi (horizontālā rotācija)

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

apgaismojums = Klight/r*(Kx vai Ky vai 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)))

4. solis: programma

Programma
Programma

Es ceru, ka šis 3D skatītāja prototips palīdzēja jums izprast 3D virtuālās realitātes darbību. Izmantojot vēl dažas pilnveidošanas un kodēšanas iespējas, šim skatītājam noteikti ir potenciāls, ko izmantot 3D spēļu izstrādē.

Ieteicams: