Turinys:
Video: „3D Viewer“: 4 žingsniai
2024 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2024-01-30 10:48
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
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:
- Toli nuo jūsų esantys objektai užima mažesnę jūsų regėjimo lauko dalį.
- Objektai, esantys toliau nuo šviesos šaltinio, atrodo tamsesnės spalvos.
- 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
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
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:
„Arduino“automobilių atbulinės eigos įspėjimo sistema - Žingsniai po žingsnio: 4 žingsniai
„Arduino“automobilių atbulinės eigos įspėjimo sistema | Žingsniai po žingsnio: Šiame projekte aš suprojektuosiu paprastą „Arduino“automobilio atbulinės eigos stovėjimo jutiklio grandinę, naudodamas „Arduino UNO“ir ultragarsinį jutiklį „HC-SR04“. Ši „Arduino“pagrįsta automobilio atbulinės eigos įspėjimo sistema gali būti naudojama autonominei navigacijai, robotų diapazonui ir kitiems diapazonams
„Arduino Halloween Edition“- „Zombies“iššokantis ekranas (žingsniai su nuotraukomis): 6 žingsniai
„Arduino Halloween Edition“- „Zombies“iššokantis ekranas (žingsniai su paveikslėliais): norite Helovino metu išgąsdinti savo draugus ir sukelti riksmą? O gal tiesiog norite padaryti gerą išdaigą? Šis iššokantis „Zombies“ekranas gali tai padaryti! Šioje instrukcijoje aš išmokysiu jus, kaip lengvai padaryti iššokančius zombius naudojant „Arduino“. HC-SR0
Akustinė levitacija naudojant „Arduino Uno“žingsnis po žingsnio (8 žingsniai): 8 žingsniai
Akustinė levitacija naudojant „Arduino Uno“žingsnis po žingsnio (8 žingsniai): ultragarsiniai garso keitikliai L298N nuolatinės srovės adapterio maitinimo šaltinis su vyrišku nuolatinės srovės kaiščiu „Arduino UNOBreadboard“Kaip tai veikia: pirmiausia įkelkite kodą į „Arduino Uno“(tai yra mikrovaldiklis su skaitmeniniu ir analoginiai prievadai kodui konvertuoti (C ++)
„Arduino“kūdikių monitorius su „Java Viewer“: 8 žingsniai (su nuotraukomis)
„Arduino“kūdikių monitorius su „Java Viewer“: sukurkite „Arduino“pagrindu pagamintą kelių jutiklių įrenginį, kad galėtumėte stebėti kambario sąlygas. Šis įrenginys gali jausti drėgmę, temperatūrą, judesį ir garsą. Pridedamas java pagrindu sukurtas žiūrovas, gaunantis serijinius duomenis iš arduino
„Headup Web Cam Viewer“: 7 žingsniai
„Headup Web Cam Viewer“: neseniai pateiktame įraše apžvelgta komercinė sistema, leidžianti vartotojams tiesiogiai pažvelgti į savo internetinę kamerą, tačiau vis tiek pamatyti asmenį, su kuriuo jie kalba - „Teleprompter“stilius - tai mano idėja. Tai lengva sukurti, nes tai yra būtina