Cuprins:
Video: Vizualizator 3D: 4 pași
2024 Autor: John Day | [email protected]. Modificat ultima dată: 2024-01-30 11:45
Buna! Pentru a-mi satisface interesul pentru programare și, sperăm, pentru a vă ajuta să vă satisfaceți, aș dori să vă arăt un vizualizator 3D pe care l-am codat în javascript. Dacă doriți să vă înțelegeți mai mult jocurile 3D sau chiar să vă creați propriul joc 3D, acest prototip vizualizator 3D este perfect pentru dvs.
Pasul 1: Teoria
Pentru a înțelege teoria acestui vizualizator 3D, puteți examina pur și simplu modul în care vă vedeți împrejurimile (vă ajută să aveți o singură sursă semnificativă de lumină). Observa asta:
- Obiectele care sunt mai departe de tine ocupă o porțiune mai mică din câmpul tău vizual.
- Obiectele care sunt mai departe de sursa de lumină par mai închise la culoare.
- Pe măsură ce suprafețele devin mai paralele (mai puțin perpendiculare) cu sursa de lumină, ele par mai închise la culoare.
Am decis să reprezint un câmp vizual cu o grămadă de linii care provin dintr-un singur punct (analog globului ocular). Ca o minge de vârf, liniile trebuie să fie uniform distanțate pentru a se asigura că fiecare porțiune a câmpului vizual este reprezentată în mod egal. În imaginea de mai sus, observați cum liniile care vin de la mingea de vârf devin mai distanțate pe măsură ce se îndepărtează mai departe de centrul mingii. Acest lucru ajută la vizualizarea implementării programului de observare 1, deoarece densitatea liniilor scade pe măsură ce obiectele se îndepărtează mai mult de punctul central.
Liniile sunt unitatea de bază a viziunii în program și sunt mapate fiecare la un pixel de pe ecran. Când o linie intersectează un obiect, pixelul său corespunzător este colorat pe baza distanței sale față de sursa de lumină și a unghiului său față de sursa de lumină.
Pasul 2: Teoria implementării
Pentru a simplifica programul, sursa de lumină este aceeași cu punctul central (globul ocular: punctul din care este vizualizată harta și de unde provin liniile). Analog cu menținerea unei lumini chiar lângă față, aceasta elimină umbrele și permite calcularea luminozității fiecărui pixel mult mai ușor.
Programul folosește și coordonate sferice, cu punctul central al vederii la origine. Acest lucru permite generarea cu ușurință a liniilor (fiecare cu un theta unic: unghi orizontal și phi: unghi vertical) și oferă baza calculelor. Liniile cu același theta sunt mapate la pixeli în același rând. Fisele unghiurilor corespunzătoare cresc pe fiecare rând de pixeli.
Pentru a simplifica matematica, harta 3D este compusă din planuri cu o variabilă comună (x, y sau z comună), în timp ce celelalte două variabile non-comune sunt limitate într-un interval, completând definiția fiecărui plan.
Pentru a privi în jur cu mouse-ul, ecuațiile programului factorează o rotație verticală și orizontală în timpul conversiei dintre sistemele de coordonate sferice și xyz. Acest lucru are ca efect preformarea unei rotații pe setul de linii de viziune „bile spike”.
Pasul 3: Matematică
Următoarele ecuații permit programului să determine ce linii intersectează fiecare obiect și informații despre fiecare intersecție. Am derivat aceste ecuații din ecuațiile de bază ale coordonatelor sferice și din ecuațiile de rotație 2D:
r = distanță, t = theta (unghi orizontal), p = phi (unghi vertical), A = rotație în jurul axei Y (rotație verticală), B = rotație în jurul axei Z (rotație orizontală)
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
iluminare = Klight / r * (Kx sau Ky sau 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)))
Pasul 4: Program
Sper că acest prototip 3D Viewer te-a ajutat să înțelegi funcționarea realităților virtuale 3D. Cu unele mai multe perfecționare și codificare, acest vizualizator are cu siguranță potențialul de a fi folosit în dezvoltarea jocurilor 3D.
Recomandat:
Vizualizator Arduino FFT cu LED-uri adresabile: 4 pași
Vizualizator Arduino FFT cu LED-uri adresabile: Acest tutorial va explica cum să construiți un vizualizator audio cu un Arduino Uno și câteva LED-uri adresabile. Acesta este un proiect pe care îmi doresc să-l fac de ceva timp, pentru că sunt un fraier pentru lumini reactive sonore. Aceste lumini folosesc FFT (Fast Fou
Vizualizator audio cu bandă LED RGB neadresabil: 6 pași (cu imagini)
Vizualizator audio LED cu bandă RGB neadresabilă: Am o bandă LED RGB de 12v în jurul televizorului meu de ceva vreme și este controlată de un driver LED plictisitor care îmi permite să aleg una dintre cele 16 culori preprogramate! Ascult un o mulțime de muzică care mă ține motivat, dar iluminatul nu stabilește
Vizualizator de sunet cu stilou laser: 3 pași (cu imagini)
Vizualizator de sunet cu stilou laser: În acest ghid veți descoperi cum să creați propriul dvs. vizualizator de sunet cu resurse simple. Vă permite să vedeți o reprezentare vizuală a sunetului, a muzicii sau a ceea ce puteți conecta la un difuzor! REȚINEȚI - Acest ghid folosește un stilou laser care poate
Vizualizator semnal de buzunar (osciloscop de buzunar): 10 pași (cu imagini)
Vizualizator de semnal de buzunar (osciloscop de buzunar): Bună ziua tuturor, cu toții facem atât de multe lucruri în fiecare zi. Pentru fiecare lucru acolo unde este nevoie de unele instrumente. Aceasta este pentru fabricarea, măsurarea, finisarea etc. Așadar, pentru lucrătorii electronici, au nevoie de instrumente precum lipitorul, multimetrul, osciloscopul etc
Wiggly Wobbly - Vezi undele sonore !! Vizualizator audio în timp real !!: 4 pași
Wiggly Wobbly - Vezi undele sonore !! Vizualizator audio în timp real !!: V-ați întrebat vreodată cum arată melodiile Beetle ?? Sau vreți pur și simplu să vedeți cum arată un sunet ?? Atunci nu vă faceți griji, sunt aici pentru a vă ajuta să-l faceți reeeeaaalll !!! Puneți-vă difuzorul la înălțime și țintiți pentru cei estompați