Sisällysluettelo:

3D -katseluohjelma: 4 vaihetta
3D -katseluohjelma: 4 vaihetta

Video: 3D -katseluohjelma: 4 vaihetta

Video: 3D -katseluohjelma: 4 vaihetta
Video: 3D-tulostusta Haapavedellä, osa 4: Tulostuksen valmistelu halutulle 3D-tulostimelle 2024, Marraskuu
Anonim
3D -katseluohjelma
3D -katseluohjelma

Hei! Tyydyttääkseni kiinnostukseni ohjelmoida ja toivottavasti auttaa tyydyttämään sinun, haluan näyttää sinulle 3D -esityksen, jonka olen koodannut javascript -ohjelmaan. Jos haluat parantaa ymmärrystäsi 3D -peleistä tai jopa luoda oman 3D -pelisi, tämä 3D -katseluohjelman prototyyppi on täydellinen sinulle.

Vaihe 1: Teoria

Teoria
Teoria

Ymmärtääksesi tämän 3D -katseluohjelman teorian voit yksinkertaisesti tutkia tapaa, jolla katsot ympäristöäsi (auttaa vain yksi merkittävä valonlähde). Huomaa, että:

  1. Kaukana olevat kohteet vievät pienemmän osan näkökentästäsi.
  2. Valonlähteestä kauempana olevat kohteet näyttävät tummemmilta.
  3. Kun pinnat muuttuvat yhdensuuntaisiksi (vähemmän kohtisuoraan) valonlähteen kanssa, ne näyttävät tummemmilta.

Päätin edustaa näkökenttää, jossa on joukko viivoja, jotka ovat peräisin yhdestä pisteestä (analoginen silmämunan kanssa). Piikkipallon tavoin linjat on sijoitettava tasaisesti, jotta kaikki näkökentän osat ovat tasapuolisesti edustettuina. Huomaa yllä olevassa kuvassa, kuinka piikkipallosta tulevat linjat ovat kauempana toisistaan, kun ne siirtyvät kauemmas pallon keskeltä. Tämä auttaa visualisoimaan ohjelman havainnon 1 toteutuksen, koska viivojen tiheys pienenee, kun esineet siirtyvät kauemmas keskipisteestä.

Viivat ovat ohjelman perusyksikkö, ja jokainen niistä on yhdistetty näytön pikseliin. Kun viiva leikkaa kohteen, sitä vastaava pikseli värjätään sen etäisyyden perusteella valonlähteestä ja kulmasta valonlähteeseen nähden.

Vaihe 2: Toteutusteoria

Toteutusteoria
Toteutusteoria

Ohjelman yksinkertaistamiseksi valonlähde on sama kuin keskipiste (silmämuna: piste, josta karttaa katsotaan ja mistä viivat tulevat). Samalla tavalla kuin valon pitäminen kasvojen vieressä, tämä poistaa varjot ja mahdollistaa jokaisen pikselin kirkkauden laskemisen paljon helpommin.

Ohjelma käyttää myös pallomaisia koordinaatteja, joiden keskipiste on lähtökohtana. Tämä mahdollistaa viivojen luomisen helposti (jokaisella on ainutlaatuinen teeta: vaakasuora kulma ja phi: pystykulma), ja se tarjoaa laskelmien perustan. Samat teeta -rivit yhdistetään saman rivin pikseleihin. Vastaavien kulmien phis kasvaa jokaisella pikselirivillä.

Matematiikan yksinkertaistamiseksi 3D-kartta koostuu tasoista, joilla on yhteinen muuttuja (yhteinen x, y tai z), kun taas kaksi muuta ei-yleistä muuttujaa rajoittuvat alueelle ja täydentävät kunkin tason määritelmän.

Jos haluat katsoa ympärillesi hiirellä, ohjelman yhtälöt vaikuttavat pystysuoraan ja vaakasuoraan kiertoon pallomaisen ja xyz -koordinaattijärjestelmän välisen muunnoksen aikana. Tämä vaikuttaa kierteen muodostamiseen "piikkipallon" näkölinjoihin.

Vaihe 3: Matematiikka

Seuraavien yhtälöiden avulla ohjelma voi määrittää, mitkä viivat leikkaavat kunkin objektin, ja tiedot kustakin leikkauksesta. Johdoin nämä yhtälöt pallokoordinaattien perusyhtälöistä ja 2D -kiertoyhtälöistä:

r = etäisyys, t = theta (vaakasuora kulma), p = phi (pystykulma), A = kiertyminen Y -akselin ympäri (pystysuuntainen kierto), B = kierto Z -akselin ympäri (vaakasuuntainen kierto)

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

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

Vaihe 4: Ohjelmoi

Ohjelmoida
Ohjelmoida

Toivon, että tämä 3D -katseluohjelman prototyyppi auttoi sinua ymmärtämään 3D -virtuaalitodellisuuksien toiminnan. Täydentämisen ja koodauksen ansiosta tällä katsojalla on varmasti potentiaalia käyttää 3D -pelikehityksessä.

Suositeltava: