3D računalna grafika: modelirajte svoj svijet

Istražite svoj svijet

Koliko znam, ne možemo samo zabiti malo svog svijeta izravno u računalo (bez oštećenja računala, u svakom slučaju). Najbolje što možemo učiniti je stvoriti računalni model našeg svijeta. S obzirom na to ograničenje, kako modeliramo nešto poput stolice, na primjer?

Predmeti u našem svijetu imaju karakteristike ili svojstva, poput oblika, veličine, težine, položaja, orijentacije i boje (a popis se nastavlja i nastavlja). Razmotrimo na trenutak samo njihov oblik, položaj i orijentaciju - ta svojstva nazivamo prostornim svojstvima. I krenimo s nečim lakšim za rad od stolice - na primjer s kockom.

Pogledajte ilustraciju na slici 1. Na njoj se vidi kocka koja sjedi u inače praznoj sobi. (Pa dobro, i soba ima vrata, ali to je tu samo da bi soba više izgledala poput sobe.)

Slika 1: Soba s kockom

Da bismo odredili oblik, položaj i orijentaciju kocke, moramo odrediti mjesto svakog od njezinih uglova. Da bismo to mogli , mogli bismo se poslužiti jezikom poput ovog:

Prvi kut je metar (ili metar, ako želite) iznad poda i dva i pol metra (ili metra) od zida iza mene. Drugi je ugao također stopa iznad poda i stopa od zida s moje lijeve strane.

Imajte na umu da su oba kuta navedena u odnosu na nešto drugo (zid i / ili pod). U našem računalnom modelu mogli bismo definirati pod i zid i koristiti ih kao referentne točke, no ispostavilo se da je puno lakše jednostavno odabrati jednu referentnu točku (koju ćemo nazvati ishodištem ) i umjesto toga je koristiti. Za svoje podrijetlo koristit ćemo kut koji čine dva zida i pod. Slika 2 označava mjesto našeg podrijetla.

Slika 2: ishodište i koordinatna os

Sada moramo naznačiti gdje se nalazi svaki kutak s obzirom na ishodište. Putu od ishodišta do ugla kocke možete odrediti na više načina. Radi jednostavnosti moramo se složiti oko standarda. Učinimo sljedeće:

Zamislite da je svaki od rubova nastalih raskrižju zid i zid ili na zid i na pod, je dao ime - mi ćemo ih nazvati x osi , na y osi , i Z osi , kako je navedeno na slici 2. I također ćemo se unaprijed dogovoriti da ćemo odrediti mjesto kuta slijedeći ovaj recept:

  • Prvo izmjerite koliko moramo putovati od ishodišta u ravnoj liniji paralelnoj s osi x
  • Zatim izmjerite koliko moramo putovati od te točke u ravnoj liniji paralelnoj s osi y
  • Napokon, izmjerite koliko moramo putovati od te točke u ravnoj liniji paralelnoj s osi z

Slika 3 prikazuje put kojim bismo išli do jednog od uglova kocke.

Slika 3: Pronalaženje vašeg puta

Kao skraćeni zapis, napišimo sve ove udaljenosti kao:

  • Udaljenost od ishodišta paralelnog s osi x
  • Udaljenost od ishodišta paralelna s osi y
  • Udaljenost od ishodišta paralelnog s osi z

ili (još kraće):

(udaljenost x, udaljenost y, udaljenost z) 

Ova trostruka vrijednost naziva se kutne koordinate . Na sličan način možemo odrediti položaj u prostoru svakog ugla. Mogli bismo otkriti, na primjer, da je kocka u ovom primjeru uglove na:

(3 feet, 1 foot, 2 feet)

ili

(3 feet, 1 foot, 3 feet)

ili

(4 feet, 1 foot, 2 feet)

i tako dalje.

Mjerne jedinice (noge ili metri, na primjer) nisu važne za naše svrhe. Važno je kako se jedinice mapiraju na standardnu ​​jedinicu zaslona - piksel. O tom mapiranju govorit ću malo kasnije.

Postaje malo nervozan

Mjesto uglova kocke određuje položaj i orijentaciju kocke. Međutim, s obzirom na samo koordinate njegovih uglova, ne možemo rekonstruirati kocku (a još manje stolicu). Zaista moramo znati gdje su rubovi, jer rubovi određuju oblik.

Svi rubovi imaju jednu vrlo lijepu karakteristiku - uvijek počinju i završavaju na uglovima. Dakle, ako znamo gdje su svi rubovi, zasigurno ćemo znati gdje su svi uglovi.

Sada ćemo iznijeti jednu veliku pojednostavljujuću pretpostavku. U našem modelu svijeta zabranit ćemo zakrivljene rubove (kasnije ćete naučiti zašto); rubovi moraju uvijek biti ravne crte. Da bismo približili zakrivljene rubove, položili ćemo ravne rubove od kraja do kraja, kao na slici 4.

Slika 4: Ravna crta aproksimacije krivulje

Rubovi tada postaju ništa više od jednostavnih segmenata crte. A segmenti linija navedeni su koordinatama njihovih početnih i krajnjih točaka. Stoga model objekta nije ništa drugo do skup segmenata linija koji opisuju njegov oblik.

Vizualizacija: Više nije samo za opuštanje

Sad kad znamo kako modelirati objekt, spremni smo se pozabaviti problemom predstavljanja modela na zaslonu računala.

Zaslon računala smatrajte prozorom u naš virtualni svijet. Sjedimo s jedne strane prozora, a virtualni svijet s druge strane. Slika 5 ilustrira ovaj koncept.

Slika 5: Naš prozor u virtualni svijet

Postoji mnogo načina za stavljanje podataka u model na prozor (ili zaslon računala). Moguće je najjednostavnije ono što se naziva izometrijskom projekcijom .

Budući da naš model ima tri dimenzije, a zaslon računala ima samo dvije, možemo ga preslikati na zaslon tako da prvo uklonimo z koordinatu (treću od tri koordinate) iz svake točke u modelu. To nam ostavlja koordinate x i y za svaku točku. Koordinate x i y odgovarajuće se skaliraju (na temelju jedinica modela) i mapiraju u piksele na zaslonu. Ove korake možemo koristiti na bilo kojoj točki interesa modela kako bismo saznali gdje će se pojaviti na zaslonu.

Ispostavilo se da nije potrebno transformirati svaku točku u našem modelu na ovaj način. Jedna od posljedica aproksimacije svakog ruba u modelu s segmentima crta je ta da stvarno trebamo transformirati samo krajnje točke segmenta linije, a ne svaku točku na segmentu crte. To je istina jer jednostavne projekcije (poput izometrijske projekcije) uvijek transformiraju segmente crta u segmente crta - segmenti crte ne postaju krivulje. Stoga, nakon što saznate položaje transformiranih krajnjih točaka, možemo koristiti ugrađene rutine crtanja linija AWT za crtanje samog segmenta crte.

Mislim da bi primjer mogao biti u redu. Stvorit ću tri jednostavna modela istog oblika u različitim orijentacijama.

Tablica 1. sadrži podatke koji opisuju jednostavan oblik u prvom položaju. Svaki redak u tablici odgovara rubu. Tablica daje koordinate početne i završne točke ruba. Pretpostavimo da oblik gledamo izvana duž z osi.

Segment Početi Kraj
x g z x g z
A 25 0 -70 25 35 -35
B 25 35 -35 25 0 0
C 25 0 0 25 -35 -35
D 25 -35 -35 25 0 -70
E 25 0 -70 -25 0 -70
F -25 0 -70 -25 35 -35
G -25 35 -35 -25 0 0
H -25 0 0 -25 -35 -35
Ja -25 -35 -35 -25 0 -70
Tablica 1: Podaci za jednostavan oblik - prvo mjesto

Aplet na slici 6 pokazuje što bismo vidjeli.

Da biste vidjeli ovaj aplet, potreban vam je preglednik s omogućenom Java. Slika 6: Jednostavan oblik - prvi položaj

Sada zakrenimo oblik za nekoliko stupnjeva. Tablica 2. sadrži podatke koji opisuju isti oblik na njegovom drugom položaju. Napomena: promijenili su se samo položaj i orijentacija, a ne i oblik.

Segment Početi Kraj
x g z x g z
A 45 0 -58 34 35 -25
B 34 35 -25 23 0 7
C 23 0 7 34 -35 -25
D 34 -35 -25 45 0 -58
E 45 0 -58 -2 0 -74
F -2 0 -74 -12 35 -41
G -12 35 -41 -23 0 -7
H -23 0 -7 -12 -35 -41
Ja -12 -35 -41 -2 0 -74
Tablica 2: Podaci za jednostavan oblik - drugi položaj

Aplet na slici 7 pokazuje što bismo vidjeli.

Da biste vidjeli ovaj aplet, potreban vam je preglednik s omogućenom Java. Slika 7: Jednostavan oblik - drugi položaj

Tri su draž, pa zakrenimo još jednom - ovaj put prema gore za nekoliko stupnjeva. Tablica 3 sadrži podatke koji opisuju oblik na njegovom trećem položaju.

Segment Početi Kraj
x g z x g z
A 45 -26 -52 34 19 -38
B 34 19 -38 23 3 6
C 23 3 6 34 -42 -6
D 34 -42 -6 45 -26 -52
E 45 -26 -52 -2 -33 -66
F -2 -33 -66 -12 12 -52
G -12 12 -52 -23 -3 -6
H -23 -3 -6 -12 -49 -20
Ja -12 -49 -20 -2 -33 -66
Tablica 3: Podaci za jednostavan oblik - treća pozicija

Aplet na slici 8 pokazuje što bismo vidjeli.

Da biste vidjeli ovaj aplet, potreban vam je preglednik s omogućenom Java. Slika 8: Jednostavan oblik - treća pozicija

Završavati

Do sada ste vjerojatno već zaključili da ručno mijenjanje orijentacije predmeta nije puno zabave. A ni rezultat nije baš interaktivan. Sljedeći mjesec pokazat ću vam kako se interaktivno manipulira objektima (i natjerat ćemo računalo da izvrši sve brojčano krcanje - uostalom, nije li to vrsta radnog računala koja bi trebala biti dobra?). Također ćemo pogledati problem perspektive - posebno ću vam pokazati kako ga uklopiti u stavove našeg modela.

Todd Sundsted piše programe otkad su računala postala dostupna u modelima stolnih računala. Iako je izvorno bio zainteresiran za izgradnju distribuiranih objektnih aplikacija na C ++, Todd je prešao na programski jezik Java kad je Java postala očit izbor za takve stvari. Todd je koautor Java Language API SuperBible, koji je sada u knjižarama svugdje. Uz pisanje, Todd je predsjednik Etcee-a, pružajući Java-usmjerenu obuku, mentorstvo i savjetovanje.

Saznajte više o ovoj temi

  • Za malo svega što se tiče 3D grafike, pogledajte:

    //www.3dsite.com/3dsite/

  • Yahoo nudi prikladan način za započinjanje pretraživanja tema 3D grafike

    //www.yahoo.com/Computers_and_Internet/Graphics/3D/

  • Ovaj članak, izvorni kod i datoteke klase možete preuzeti u obliku gzipirane tar datoteke:

    /javaworld/jw-05-1997/howto/jw-05-howto.tar.gz

  • Prethodni članci How-To Java
  • "Kad statične slike jednostavno ne rezanje" - naučite kako začiniti svoje aplete i programe

    s animiranim slikama.

  • "Kako Java koristi model proizvođača / potrošača za obradu slika - Izgled iznutra" - Saznajte više o moćnoj Javinoj tehnici rukovanja slikama, a zatim slijedite moje jednostavne postupke za izgradnju vlastitih komponenata proizvođača i potrošača.
  • "Saznajte kako apleti asinhrono učitavaju mrežne slike" - Evo izbliza o načinu na koji Java apleti obrađuju slike u mrežnom okruženju.
  • "Crtanje teksta jednostavno je s tri Java klase" - saznajte kako stvoriti tekst koji je vizualno privlačan kroz ovo objašnjenje koje klase koristiti i kako rade zajedno.
  • "Ispitivanje HotSpot-a, objektno orijentiranog programa crtanja" - naučite kako se dijelovi Java jezika i biblioteke klasa uklapaju kroz proučavanje ove Java. program
  • "Korištenje klase grafike" - pažljiv pogled na klasu grafike i primitive za crtanje koje ona pruža te demonstracija njezine upotrebe.
  • "Promatrač i uočljiv" - Uvod u sučelje Observer i klasu Observable koristeći arhitekturu Model / View / Controller kao vodič.
  • "Učinkovito korisničko sučelje" - Uvod u sučelje Observer i klasu Observable koristeći arhitekturu Model / View / Controller kao vodič.
  • "Java i rukovanje događajima" - Kako se događaji prenose komponentama korisničkog sučelja, kako stvoriti obrađivače događaja i još mnogo toga.
  • "Uvod u AWT" - Opis Java-ovog alata korisničkog sučelja.

Ovu priču "3D računalna grafika: modeliraj svoj svijet" izvorno je objavio JavaWorld.