Programavimas

3D kompiuterinė grafika: modeliuokite savo pasaulį

Tyrinėkite savo pasaulį

Kiek žinau, negalime tiesiog įkišti šiek tiek savo pasaulio tiesiai į kompiuterį (bet kokiu atveju nepažeisdami kompiuterio). Geriausia, ką galime padaryti, yra sukurti savo pasaulio kompiuterinį modelį. Atsižvelgiant į šį apribojimą, kaip mes galime modeliuoti, pavyzdžiui, kėdę?

Mūsų pasaulio objektai turi savybių ar savybių, tokių kaip forma, dydis, svoris, padėtis, orientacija ir spalva (ir sąrašą galima tęsti). Trumpam pasvarstykime tik apie jų formą, padėtį ir orientaciją - šias savybes mes vadiname erdvinis savybes. Pradėkime nuo kažko, ką lengviau dirbti nei kėdės - pavyzdžiui, kubo.

Pažvelkite į 1 paveiksle pateiktą iliustraciją. Joje matyti kubas, sėdintis šiaip tuščiame kambaryje. (Na gerai, kambaryje taip pat yra durys, bet tai tik tam, kad kambarys atrodytų labiau kaip kambarys.)

1 paveikslas: kambarys su kubu

Norėdami nurodyti kubo formą, padėtį ir orientaciją, turime nurodyti kiekvieno jo kampo vietą. Norėdami tai padaryti, mes galėjo naudoti tokią kalbą:

Pirmasis kampas yra pėda (arba metras, jei norite) virš grindų ir dvi su puse pėdos (arba metrų) nuo sienos už manęs. Antrasis kampas taip pat yra pėda virš grindų ir pėda nuo sienos kairėje.

Atkreipkite dėmesį, kad abu kampai buvo nurodyti palyginti su kažkuo kitu (siena ir (arba) grindys). Savo kompiuterio modelyje mes galėjo apibrėžkite grindis ir sieną ir naudokite juos kaip atskaitos taškus, tačiau pasirodo daug paprasčiau tiesiog pasirinkti vieną atskaitos tašką (kurį mes pavadinsime kilmę) ir naudokite tai. Savo kilmei naudosime kampą, kurį sudaro dvi sienos ir grindys. 2 paveiksle nurodoma mūsų kilmės vieta.

2 paveikslas: pradžia ir koordinačių ašis

Dabar turime nurodyti, kur yra kiekvienas kampas, atsižvelgiant į kilmę. Kelias nuo pradžios iki kubo kampo galite nurodyti keliais būdais. Kad būtų paprasčiau, turime susitarti dėl standarto. Atlikime šiuos veiksmus:

Įsivaizduokite, kad kiekvienam kraštui, susidariusiam susikirtus sienai ir sienai, arba sienai ir grindims, yra suteiktas vardas - mes juos pavadinsime x ašis, y ašis, ir z ašis, kaip parodyta 2 paveiksle. Ir iš anksto susitarkime, kad kampo vietą nustatysime vadovaudamiesi šiuo receptu:

  • Pirmiausia išmatuokite, kiek mes turime nukeliauti nuo pradžios tiesia linija, lygiagrečia x ašiai
  • Tada išmatuokite, kiek mes turime nukeliauti nuo to taško tiesia linija, lygiagrečia y ašiai
  • Galiausiai išmatuokite, kiek mes turime nukeliauti nuo to taško tiesia linija, lygiagrečia z ašiai

3 paveiksle parodytas kelias, kuriuo eisime link vieno iš kubo kampų.

3 paveikslas: savo kelio radimas

Parašykite visus šiuos atstumus kaip trumpą užrašą:

  • Atstumas nuo pradžios lygiagretus x ašiai
  • Atstumas nuo pradžios lygiagretus y ašiai
  • Atstumas nuo pradžios lygiagretus z ašiai

arba (dar trumpiau):

(atstumas x, atstumas y, atstumas z) 

Šis vertybių trigubas vadinamas kampu koordinatės. Panašiai galime nurodyti kiekvieno kampo padėtį erdvėje. Pavyzdžiui, galime pastebėti, kad kubas yra toks, kurio kampai yra:

(3 pėdos, 1 pėda, 2 pėdos)

arba

(3 pėdos, 1 pėda, 3 pėdos)

arba

(4 pėdos, 1 pėda, 2 pėdos)

ir taip toliau.

Matavimo vienetai (pavyzdžiui, pėdos ar metrai) nėra svarbūs mūsų tikslams. Svarbu tai, kaip vienetai susiejami su standartiniu ekrano nekilnojamojo turto vienetu - pikseliu. Apie tą kartografavimą pakalbėsiu šiek tiek vėliau.

Šiek tiek nervina

Kubo kampų vieta lemia kubo padėtį ir orientaciją. Tačiau duota tik jo kampų koordinačių, mes negalime rekonstruoti kubo (o tuo labiau kėdės). Mes tikrai turime žinoti, kur yra kraštai, nes kraštai lemia formą.

Visi kraštai turi vieną labai gražią savybę - jie visada prasideda ir baigiasi kampuose. Taigi, jei žinosime, kur yra visi kraštai, tikrai žinosime, kur yra visi kampai.

Dabar mes padarysime vieną didelę supaprastinančią prielaidą. Pagal savo pasaulio modelį mes išlaisvinsime išlenktus kraštus (vėliau sužinosite, kodėl); kraštai visada turi būti tiesūs. Norėdami apytiksliai nustatyti išlenktus kraštus, tiesiame kraštus nuo galo iki galo, kaip parodyta 4 paveiksle.

4 paveikslas: kreivės tiesės tiesinis artėjimas

Tuomet kraštai tampa ne daugiau kaip paprastais linijų segmentais. Linijų atkarpos nurodomos jų pradžios ir pabaigos taškų koordinatėmis. Todėl objekto modelis yra ne kas kita, kaip linijos segmentų, apibūdinančių jo formą, rinkinys.

Vizualizacija: tai ne tik poilsiui

Dabar, kai mokame modeliuoti objektą, esame pasirengę spręsti modelio atvaizdavimo kompiuterio ekrane problemą.

Pagalvokite apie kompiuterio ekraną kaip apie langą į virtualų pasaulį. Mes sėdime vienoje lango pusėje, o kitas - virtualus pasaulis. 5 paveiksle pavaizduota ši sąvoka.

5 paveikslas: Mūsų langas į virtualų pasaulį

Yra daug būdų, kaip pateikti informaciją į modelį ant lango (arba kompiuterio ekrano). Galbūt paprasčiausia yra tai, kas vadinama izometrinė projekcija.

Kadangi mūsų modelis turi tris matmenis, o kompiuterio ekranas - tik du, modelį galime susieti su ekranu, pirmiausia pašalindami z koordinatą (trečią iš trijų koordinačių) iš kiekvieno modelio taško. Tai palieka kiekvieno taško x ir y koordinates. X ir y koordinatės yra tinkamai keičiamos (remiantis modelio vienetais) ir priskiriamos ekrano pikseliams. Šiuos veiksmus galime atlikti bet kuriame modelio dominančiame taške, kad sužinotume, kur jis pasirodys ekrane.

Kaip paaiškėjo, tai nėra būtina transformuotis kiekvienas mūsų modelio taškas tokiu būdu. Viena iš pasekmių, kai kiekvienas modelio kraštas buvo priartintas tiesių atkarpomis, yra tas, kad mums reikia transformuoti tik tiesės atkarpos galinius taškus, o ne kiekvieną tiesės atkarpos tašką. Tai tiesa, nes paprastos projekcijos (kaip ir izometrinė projekcija) visada transformuoja linijos segmentus į linijos segmentus - linijos segmentai netampa kreivėmis. Todėl, žinodami transformuotų galinių taškų padėtį, mes galime naudoti AWT įmontuotą linijų brėžimo tvarką, kad nubrėžtume patį linijos segmentą.

Manau, kad pavyzdys gali būti tvarkingas. Aš ketinu sukurti tris paprastus tos pačios formos modelius skirtingomis orientacijomis.

1 lentelėje pateikti duomenys, apibūdinantys paprastą formą pirmoje padėtyje. Kiekviena lentelės eilutė atitinka kraštą. Lentelėje pateikiamos krašto pradžios ir pabaigos taškų koordinatės. Tarkime, kad į formą žiūrime išilgai z ašies.

SegmentasPradžiaGalas
xyzxyz
A250-702535-35
B2535-352500
C250025-35-35
D25-35-35250-70
E250-70-250-70
F-250-70-2535-35
G-2535-35-2500
H-2500-25-35-35
-25-35-35-250-70
1 lentelė: paprastos formos duomenys - pirmoji padėtis

6 paveikslo programėlė rodo, ką mes matytume.

Norint pamatyti šią programėlę, reikia „Java“ palaikančios naršyklės.6 paveikslas: paprasta forma - pirmoji padėtis

Dabar pasukime formą keliais laipsniais. 2 lentelėje pateikti duomenys, apibūdinantys tą pačią formą antroje padėtyje. Atkreipkite dėmesį, kad pasikeitė tik padėtis ir orientacija, o ne forma.

SegmentasPradžiaGalas
xyzxyz
A450-583435-25
B3435-252307
C230734-35-25
D34-35-25450-58
E450-58-20-74
F-20-74-1235-41
G-1235-41-230-7
H-230-7-12-35-41
-12-35-41-20-74
2 lentelė. Paprastos formos duomenys - antroji padėtis

7 paveikslo programėlė rodo, ką mes matytume.

Norint pamatyti šią programėlę, reikia „Java“ palaikančios naršyklės.7 paveikslas: paprasta forma - antroji padėtis

Trys yra žavesys, todėl pasukime dar vieną kartą - šį kartą keliais laipsniais aukštyn. 3 lentelėje pateikti duomenys, apibūdinantys figūrą trečioje padėtyje.

SegmentasPradžiaGalas
xyzxyz
A45-26-523419-38
B3419-382336
C233634-42-6
D34-42-645-26-52
E45-26-52-2-33-66
F-2-33-66-1212-52
G-1212-52-23-3-6
H-23-3-6-12-49-20
-12-49-20-2-33-66
3 lentelė. Paprastos formos duomenys - trečioji padėtis

8 paveikslo programėlė rodo, ką mes matytume.

Norint pamatyti šią programėlę, reikia „Java“ palaikančios naršyklės.8 paveikslas: paprasta forma - trečioji padėtis

Apvyniojimas

Dabar tikriausiai priėjote išvadą, kad rankomis pakeisti objekto orientaciją nėra labai smagu. Rezultatas taip pat nėra labai interaktyvus. Kitą mėnesį aš jums parodysiu, kaip interaktyviai manipuliuoti objektais (ir mes priversime kompiuterį atlikti visus numerius), argi ne tas darbo kompiuterių tipas turėtų būti geras? Mes taip pat apžvelgsime perspektyvos problemą - visų pirma aš jums parodysiu, kaip ją įtraukti į mūsų modelio vaizdus.

Toddas Sundstedas rašė programas nuo tada, kai kompiuteriai tapo prieinami darbalaukio modeliuose. Nors Toddas iš pradžių domėjosi paskirstytų objektų programų kūrimu C ++, Toddas persikėlė į „Java“ programavimo kalbą, kai „Java“ tapo akivaizdžiu pasirinkimu tokiems dalykams. Toddas yra „Java“ kalbos API „SuperBible“ bendraautorius, dabar knygynuose visur. Be rašymo, Toddas yra „Etcee“ prezidentas, teikia Java orientuotus mokymus, konsultuoja ir konsultuoja.

Sužinokite daugiau apie šią temą

  • Šiek tiek apie 3D grafiką rasite:

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

  • „Yahoo“ suteikia patogų būdą pradėti 3D grafikos temų paiešką

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

  • Šį straipsnį, šaltinio kodą ir klasės failus galite atsisiųsti kaip „gzip“ dervos failą:

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

  • Ankstesni „Java“ straipsniai
  • „Kai statiški vaizdai tiesiog nenukerta“ - sužinokite, kaip pagardinti savo programėles ir programas

    su animuotais vaizdais.

  • „Kaip„ Java “naudoja gamintojo / vartotojo modelį vaizdams tvarkyti - viešai neatskleista išvaizda“ - Sužinokite daugiau apie galingą „Java“ vaizdų tvarkymo techniką ir atlikite mano paprastas procedūras kurdami savo gamintojo ir vartotojo komponentus.
  • „Sužinokite, kaip programėlės asinchroniškai įkelia vaizdus tinkle“ - čia atidžiai apžvelgiama, kaip „Java“ programėlės tvarko vaizdus tinkle veikiančioje aplinkoje.
  • „Paprastas teksto piešimas naudojant tris„ Java “klases“ - sužinokite, kaip sukurti vizualiai patrauklų tekstą, paaiškindami, kokias klases naudoti ir kaip jie veikia kartu.
  • „Objektyvaus piešimo programos„ HotSpot “nagrinėjimas“ - sužinokite, kaip „Java“ kalbos ir klasės bibliotekos dalys sutampa, atlikdami šios „Java“ studijas. programa
  • „Grafikos klasės naudojimas“ - atidus žvilgsnis į grafikos klasę ir jos teikiamus piešimo pradmenis bei jos naudojimo demonstravimas.
  • „Stebėtojas ir stebimas“ - įvadas į stebėtojo sąsają ir stebimą klasę, naudojant modelio / rodinio / valdiklio architektūrą kaip vadovą.
  • „Efektyvi vartotojo sąsaja“ - „Observer“ sąsajos ir „Observable“ klasės įvadas, naudojant modelio / rodinio / valdiklio architektūrą kaip vadovą.
  • „Java ir įvykių tvarkymas“ - kaip įvykiai perduodami vartotojo sąsajos komponentams, kaip sukurti įvykių tvarkytuvus ir dar daugiau.
  • „Įvadas į AWT“ - „Java“ vartotojo sąsajos įrankių rinkinio aprašymas.

Šią istoriją „3D kompiuterinė grafika: modeliuokite savo pasaulį“ iš pradžių paskelbė „JavaWorld“.

$config[zx-auto] not found$config[zx-overlay] not found