Sadržaj:

3D preglednik: 4 koraka
3D preglednik: 4 koraka

Video: 3D preglednik: 4 koraka

Video: 3D preglednik: 4 koraka
Video: три кошака и качалка 2024, Juli
Anonim
3D Viewer
3D Viewer

Zdravo! Kako bih zadovoljio svoje zanimanje za programiranje i nadam se da ću zadovoljiti vaše, želio bih vam pokazati 3D preglednik koji sam kodirao u javascript -u. Ako želite proširiti svoje razumijevanje 3D igara ili čak stvoriti vlastitu 3D igru, ovaj prototipni 3D preglednik savršen je za vas.

Korak 1: Teorija

The Theory
The Theory

Da biste razumjeli teoriju ovog 3D preglednika, možete jednostavno ispitati način na koji gledate svoju okolinu (pomaže imati samo jedan značajan izvor svjetlosti). Primijetite da:

  1. Objekti koji su udaljeniji od vas zauzimaju manji dio vašeg vidnog polja.
  2. Objekti koji su udaljeniji od izvora svjetlosti izgledaju tamnije boje.
  3. Kako površine postaju paralelnije (manje okomite) na izvor svjetlosti, postaju tamnije boje.

Odlučio sam predstaviti vidno polje s hrpom linija koje proizlaze iz jedne točke (analogno očnoj jabučici). Poput šiljaste kugle, linije moraju biti ravnomjerno razmaknute kako bi se osiguralo da je svaki dio vidnog polja podjednako zastupljen. Na gornjoj slici primijetite kako se linije koje dolaze od šiljka postaju sve više razmaknute kako se udaljavaju od središta loptice. Ovo pomaže u vizualizaciji programske implementacije opservacije 1 jer se gustoća linija smanjuje kako se objekti odmiču dalje od središnje točke.

Linije su osnovna jedinica vida u programu i svaka je preslikana u piksel na ekranu. Kada linija siječe objekt, odgovarajući piksel je obojen na osnovu udaljenosti od izvora svjetlosti i njegovog kuta od izvora svjetlosti.

Korak 2: Teorija implementacije

Teorija implementacije
Teorija implementacije

Radi pojednostavljenja programa, izvor svjetlosti je isti kao središnja tačka (očna jabučica: tačka sa koje se gleda mapa i odakle potiču linije). Analogno držanju svjetla tik uz vaše lice, ovo uklanja sjene i omogućuje mnogo lakše izračunavanje svjetline svakog piksela.

Program takođe koristi sferne koordinate, sa središnjom tačkom vida na početku. To omogućava lako generiranje linija (svaka s jedinstvenim theta: vodoravnim kutom i phi: okomitim kutom), te daje osnovu za proračune. Linije sa istim theta preslikane su u piksele u istom redu. Phis odgovarajućih kutova povećava se u svakom redu piksela.

Radi pojednostavljenja matematike, 3D karta se sastoji od ravnina sa zajedničkom varijablom (zajednički x, y ili z), dok su druge dvije neuobičajene varijable ograničene unutar raspona, čime se dovršava definicija svake ravnine.

Da biste pogledali okolo mišem, jednadžbe programa čine faktor vertikalne i horizontalne rotacije tokom konverzije između sfernog i xyz koordinatnog sistema. To ima učinak predformiranja rotacije na nizu vidljivih linija "šiljasta kugla".

Korak 3: Matematika

Sljedeće jednadžbe omogućuju programu da odredi koje linije sijeku svaki objekt i informacije o svakom raskrižju. Izveo sam ove jednadžbe iz osnovnih jednadžbi sfernih koordinata i 2D jednadžbi rotacije:

r = udaljenost, t = theta (vodoravni kut), p = phi (okomiti kut), A = rotacija oko Y osi (okomita rotacija), B = rotacija oko osi Z (vodoravna rotacija)

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

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

Korak 4: Program

Program
Program

Nadam se da vam je ovaj prototip 3D preglednika pomogao da razumijete funkcioniranje 3D virtualne stvarnosti. Uz još usavršavanja i kodiranja, ovaj gledatelj zasigurno ima potencijala za upotrebu u razvoju 3D igara.

Preporučuje se: