Turinys:

„3D Viewer“: 4 žingsniai
„3D Viewer“: 4 žingsniai

Video: „3D Viewer“: 4 žingsniai

Video: „3D Viewer“: 4 žingsniai
Video: GeoMap 2023: darbas su taškų debesimis (point cloud) | Vebinaras 2024, Lapkritis
Anonim
3D peržiūros priemonė
3D peržiūros priemonė

Sveiki! Norėdamas patenkinti savo susidomėjimą programavimu ir, tikiuosi, padėti patenkinti jūsų, norėčiau parodyti jums 3D peržiūros programą, kurią užkodavau „javascript“. Jei norite geriau suprasti 3D žaidimus ar net sukurti savo 3D žaidimą, šis 3D žiūrovo prototipas jums puikiai tinka.

1 žingsnis: teorija

Teorija
Teorija

Norėdami suprasti šios 3D vaizduoklės teoriją, galite tiesiog išnagrinėti, kaip matote savo aplinką (tai padeda turėti tik vieną reikšmingą šviesos šaltinį). Pastebėti, kad:

  1. Toli nuo jūsų esantys objektai užima mažesnę jūsų regėjimo lauko dalį.
  2. Objektai, esantys toliau nuo šviesos šaltinio, atrodo tamsesnės spalvos.
  3. Kadangi paviršiai tampa lygesni (mažiau statmeni) šviesos šaltiniui, jie atrodo tamsesni.

Aš nusprendžiau pavaizduoti regėjimo lauką su daugybe linijų, kylančių iš vieno taško (analogiško akies obuoliui). Kaip ir smaigalinis rutulys, linijos turi būti tolygiai išdėstytos, kad kiekviena regėjimo lauko dalis būtų vienodai pavaizduota. Aukščiau esančiame paveikslėlyje pastebėkite, kaip nuo smaigalio rutulio einančios linijos tampa tolimesnės, kai juda toliau nuo rutulio centro. Tai padeda vizualizuoti programos 1 stebėjimo įgyvendinimą, nes linijų tankis mažėja, kai objektai tolėja nuo centro taško.

Linijos yra pagrindinis programos matymo vienetas, ir kiekviena iš jų yra susieta su ekrano pikseliu. Kai linija kerta objektą, atitinkamas pikselis yra spalvotas pagal atstumą nuo šviesos šaltinio ir kampą nuo šviesos šaltinio.

2 žingsnis: įgyvendinimo teorija

Įgyvendinimo teorija
Įgyvendinimo teorija

Siekiant supaprastinti programą, šviesos šaltinis yra tas pats, kaip ir centro taškas (akies obuolys: taškas, iš kurio peržiūrimas žemėlapis ir iš kur kyla linijos). Analogiškai laikant šviesą prie veido, tai pašalina šešėlius ir leidžia daug lengviau apskaičiuoti kiekvieno pikselio ryškumą.

Programa taip pat naudoja sferines koordinates, kurių centre yra regėjimo taškas. Tai leidžia lengvai sugeneruoti linijas (kiekviena turi unikalią teta: horizontalus kampas ir phi: vertikalus kampas) ir yra skaičiavimų pagrindas. Linijos su ta pačia teta yra susietos su taškais toje pačioje eilutėje. Atitinkamų kampų phis padidėja kiekvienoje pikselių eilutėje.

Siekiant supaprastinti matematiką, 3D žemėlapį sudaro plokštumos, turinčios bendrą kintamąjį (bendras x, y arba z), o kiti du neįprasti kintamieji yra ribose, užbaigiant kiekvienos plokštumos apibrėžimą.

Norėdami apsidairyti pele, programos lygtys vertikaliai ir horizontaliai sukasi, kai konvertuojama tarp sferinių ir xyz koordinačių sistemų. Dėl to regėjimo linijų rinkinys „smaigalinis kamuolys“iš anksto suformuojamas.

3 žingsnis: matematika

Šios lygtys leidžia programai nustatyti, kurios linijos kerta kiekvieną objektą, ir informaciją apie kiekvieną sankirtą. Aš išvedžiau šias lygtis iš pagrindinių sferinių koordinačių lygčių ir 2D sukimosi lygčių:

r = atstumas, t = teta (horizontalus kampas), p = phi (vertikalus kampas), A = sukimasis aplink Y ašį (vertikalus sukimasis), B = sukimasis aplink Z ašį (horizontalus sukimasis)

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

apšvietimas = Klight/r*(Kx arba Ky arba 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 žingsnis: programa

Programa
Programa

Tikiuosi, kad šis 3D žiūrovo prototipas padėjo jums suprasti 3D virtualios realybės veikimą. Dar šiek tiek tobulindamas ir koduodamas, šis žiūrovas tikrai gali būti panaudotas kuriant 3D žaidimus.

Rekomenduojamas: