3D programiranje u Javi

 

 

Način 3D programiranja je da tijelo koje je trodimenzijalno, prikažeš u ravnini tako da ono izgleda kao da ima tri dimenzije.

K tome da bi se dobio osjećaj prostornosti, prslikavanje tijela u ravninu všri se preko perspektivnog preslikavanja.

 

Perspektivno preslikavanje: Treba u prostoru zamisliti ravninu, tijelo i jednu daleku točku u kojoj se sijeku svi prvci koji vrše preslikavanje tijela. Kroz sve točke tijela prostaviš pravce koji se sijeku u dalekoj točki. Tamo gdje ti prostorni pravci presjecaju ravninu, označimo točke, koje pospajamo istim redosljedom, kao što su spojene one na tijelu npr. Kocki.

Na taj način dobimo najjednostavniji prikaz 3D tijela u ravnini.

 

Evo kako to izgleda preko matematičkih formula:

Imamo točku T1(x1,y1,z1) u prostoru, koju trebamo preslikati u ravninu (ja ću pokazati primjer preslikavanja u xy ravninu jer je tako najjednostavnije).

 

Parametarska jednadžba pravca kroz dvije točke (neka točka na tijelu T1 i daleka točka P) u prostoru:

x=x1+(px-x1)*la1; la1-je naprosto neki čimbenik(koeficijent),  px-x koordinata točke P

y=y1+(py-y1)*la1;

z=z1+(pz-z1)*la1;

 

Kako ću preslikavanje vršiti u xy-ravninu, stavljam da mi je z=0, iz čega slijedi izraz za la1:

la1=-z1/(pz-z1), a uvrštenjem la1 u prethodne izraze za x i y dobijemo točku preslikanu u xy-ravninu.

xc1=x1+z1(px-x1)/(pz-z1);

yc1=y1+z1(py-y1)/(pz-z1);

 

Nakon što na taj način preslikamo sve točke u xy-ravninu, te ih pospojimo dužinama i nakon što to prikažemo na zaslonu, dobit ćemo prikaz 3D slike tijela.

 

Moj primjer:

Ja sam odlučio prikazati 3D kocku, koja se može pomicati paralelno s osima, te vrtiti pritiskom određenih tipki na tipkovnici, zbog čega tu treba znanje o izradi animacija.

Vrtnju i usporedno pomicanje s osima omogućio sam pomoću Helmertove 7 parametarske transformacije koordinata.

 

Objašnjenje Helmertove 7-parametarske transformacije:

 

Opći izraz za prelaženje iz jednog koordinatnog sustava u drugi:

Xt=C+ni*R*X;

Xt={xt,yt,zt}; tj. vektor položaja kojeg dobijemo nakon transformacije.

X={x,y,z}; tj. vektor položaja kojeg želimo prevesti (transformirati) u Xt.

C={cx,cy,cz}; tj. vektor usporednih pomaka s osima(translacija).

ni=mjerilo, koje nisam upotrebljavao, pa je ono u tom slučaju ni=1.

R-matrica koja određuje način vrtnje(3x3), pomoću koje možemo vrtiti tijelo oko sve tri osi za kuteve al1 (oko x-osi), al2 (oko y-osi), al3 (oko z-osi).

 

 

Free Web Hosting