Programovanie

3D počítačová grafika: Modelujte svoj svet

Preskúmajte svoj svet

Pokiaľ viem, nemôžeme len kúsok z nášho sveta strčiť priamo do počítača (aj tak bez poškodenia počítača). Najlepšie, čo môžeme urobiť, je vytvoriť počítačový model nášho sveta. Vzhľadom na toto obmedzenie, ako napríklad vymodelujeme niečo ako stoličku?

Objekty v našom svete majú vlastnosti alebo vlastnosti, ako sú tvar, veľkosť, váha, poloha, orientácia a farba (a zoznam pokračuje ďalej a ďalej). Zvážme na chvíľu iba ich tvar, polohu a orientáciu - tieto vlastnosti nazývame priestorové vlastnosti. A začnime niečím, s čím sa ľahšie pracuje ako so stoličkou - napríklad kockou.

Pozrite sa na ilustráciu na obrázku 1. Ukazuje kocku sediacu v inak prázdnej miestnosti. (No dobre, izba má tiež dvere, ale sú tu len preto, aby vyzerala viac ako izba.)

Obrázok 1: Izba s kockou

Aby sme mohli určiť tvar, polohu a orientáciu kocky, musíme určiť umiestnenie každého z jej rohov. Aby sme to dosiahli, my mohol použite taký jazyk:

Prvý roh je stopa (alebo meter, ak chcete) nad podlahou a dva a pol stopy (alebo metre) od steny za mnou. Druhý roh je tiež noha nad podlahou a noha od steny po mojej ľavici.

Upozorňujeme, že oba rohy boli určené vo vzťahu k niečomu inému (stena a / alebo podlaha). V našom počítačovom modeli sme mohol definujte podlahu a stenu a použite ich ako referenčné body, ale ukázalo sa, že je oveľa jednoduchšie jednoducho zvoliť jeden referenčný bod (ktorý budeme nazývať pôvodu) a miesto toho použite. Pre náš pôvod použijeme roh tvorený dvoma stenami a podlahou. Obrázok 2 ukazuje miesto nášho pôvodu.

Obrázok 2: Počiatok a súradnicová os

Teraz musíme označiť, kde sa nachádza každý roh vzhľadom na pôvod. Cestu od začiatku po roh kocky môžete určiť niekoľkými spôsobmi. Pre jednoduchosť sa musíme dohodnúť na štandarde. Urobme nasledovné:

Predstavte si, že každý z okrajov tvorených priesečníkom steny a steny alebo steny a podlahy je pomenovaný - nazvime ich os x, os ya os z, ako je to znázornené na obrázku 2. A tiež sa vopred dohodnime, že umiestnenie rohu určíme podľa tohto receptu:

  • Najskôr zmerajte, ako ďaleko musíme prejsť od počiatku v priamke rovnobežnej s osou x
  • Potom zmerajte, ako ďaleko musíme z daného bodu prejsť priamkou rovnobežnou s osou y
  • Nakoniec zmerajte, ako ďaleko musíme z daného bodu prejsť priamkou rovnobežnou s osou z

Obrázok 3 zobrazuje cestu, ktorou by sme sa vydali, aby sme sa dostali do jedného z rohov kocky.

Obrázok 3: Nájdenie vašej cesty

Ako skratkovú notáciu napíšeme všetky tieto vzdialenosti ako:

  • Vzdialenosť od začiatku rovnobežná s osou x
  • Vzdialenosť od začiatku rovnobežná s osou y
  • Vzdialenosť od začiatku rovnobežná s osou z

alebo (ešte kratšie):

(vzdialenosť x, vzdialenosť y, vzdialenosť z) 

Táto trojica hodnôt sa nazýva rohová súradnice. Podobným spôsobom môžeme určiť pozíciu v priestore každého rohu. Možno by sme zistili, že napríklad kocka, ktorá má tento príklad, má rohy:

(3 stopy, 1 stopa, 2 stopy)

alebo

(3 stopy, 1 stopa, 3 stopy)

alebo

(4 stopy, 1 stopa, 2 stopy)

a tak ďalej.

Jednotky merania (napríklad stopy alebo metre) nie sú pre naše účely dôležité. Dôležité je, ako sa jednotky mapujú na štandardnú jednotku nehnuteľnosti na obrazovke - pixel. O tom mapovaní si poviem niečo neskôr.

Trochu nervózny

Umiestnenie rohov kocky určuje polohu a orientáciu kocky. Avšak dané iba súradnice jeho rohov, nemôžeme rekonštruovať kocku (tým menej stoličku). Skutočne potrebujeme vedieť, kde sú hrany, pretože hrany určujú tvar.

Všetky hrany majú jednu veľmi peknú vlastnosť - vždy sa začínajú a končia v rohoch. Ak teda vieme, kde sú všetky hrany, určite budeme vedieť, kde sú všetky rohy.

Teraz urobíme jeden veľký zjednodušujúci predpoklad. V našom modeli sveta ideme mimo zákon zakrivené hrany (neskôr sa dozviete prečo); okraje musia byť vždy rovné čiary. Aby sme priblížili zakrivené hrany, položíme rovné hrany od konca po koniec, ako na obrázku 4.

Obrázok 4: Aproximácia priamky krivky

Hrany sa potom nestanú ničím iným ako jednoduchými úsečkami. A úsečky sú určené súradnicami ich počiatočných a koncových bodov. Preto model objektu nie je ničím iným ako súborom úsečiek, ktoré popisujú jeho tvar.

Vizualizácia: Už to nie je len na relaxáciu

Teraz, keď vieme, ako modelovať objekt, sme pripravení zaoberať sa problémom predstavovania modelu na obrazovke počítača.

Predstavte si obrazovku počítača ako okno do nášho virtuálneho sveta. Sedíme na jednej strane okna a virtuálny svet sedí na druhej. Obrázok 5 ilustruje tento koncept.

Obrázok 5: Naše okno do virtuálneho sveta

Existuje mnoho spôsobov, ako umiestniť informácie do modelu na okno (alebo na obrazovku počítača). Možno najjednoduchšie je to, čo sa nazýva izometrická projekcia.

Pretože náš model má tri rozmery a obrazovka počítača má iba dva, môžeme model namapovať na obrazovku tak, že najskôr odstránime súradnicu z (tretiu z troch súradníc) z každého bodu modelu. Toto nám ponecháva súradnice x a y pre každý bod. Súradnice x a y sú príslušne zmenšené (na základe jednotiek modelu) a mapované na pixely na obrazovke. Tieto kroky môžeme použiť na ktoromkoľvek zaujímavom mieste v modeli, aby sme zistili, kde by sa na obrazovke objavil.

Ako sa ukázalo, nie je to potrebné transformovať každý bod v našom modeli týmto spôsobom. Jedným z dôsledkov aproximácie každej hrany v modeli s úsečkami je, že skutočne potrebujeme transformovať iba koncové body úsečky, nie každý bod v úsečke. To je pravda, pretože jednoduché projekcie (napríklad izometrické projekcie) vždy transformujú úsečky na úsečky - úsečky sa nestanú krivkami. Preto, akonáhle poznáte polohy transformovaných koncových bodov, môžeme pomocou vstavaných rutín kreslenia čiary AWT nakresliť samotný čiarový segment.

Myslím, že príklad môže byť v poriadku. Chystám sa vytvoriť tri jednoduché modely rovnakého tvaru v rôznych orientáciách.

Tabuľka 1 obsahuje údaje popisujúce jednoduchý tvar na svojej prvej pozícii. Každý riadok v tabuľke zodpovedá okraju. V tabuľke sú uvedené súradnice začiatočného a koncového bodu hrany. Predpokladajme, že sa pozeráme na tvar z von pozdĺž osi z.

SegmentZačaťKoniec
XrzXrz
A250-702535-35
B2535-352500
C.250025-35-35
D25-35-35250-70
E250-70-250-70
F-250-70-2535-35
G-2535-35-2500
H-2500-25-35-35
Ja-25-35-35-250-70
Tabuľka 1: Údaje pre jednoduchý tvar - prvá pozícia

Applet na obrázku 6 zobrazuje to, čo by sme videli.

Ak chcete vidieť tento applet, potrebujete prehliadač s podporou Java.Obrázok 6: Jednoduchý tvar - prvá poloha

Teraz poďme otočiť tvar o niekoľko stupňov. Tabuľka 2 obsahuje údaje popisujúce rovnaký tvar na jeho druhej pozícii. Upozorňujeme, že sa zmenila iba poloha a orientácia, nie tvar.

SegmentZačaťKoniec
XrzXrz
A450-583435-25
B3435-252307
C.230734-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
Ja-12-35-41-20-74
Tabuľka 2: Údaje pre jednoduchý tvar - druhá pozícia

Applet na obrázku 7 zobrazuje to, čo by sme videli.

Ak chcete vidieť tento applet, potrebujete prehliadač s podporou Java.Obrázok 7: Jednoduchý tvar - druhá poloha

Trojka je kúzlo, poďme ju teda otočiť ešte raz - tentokrát o pár stupňov nahor. Tabuľka 3 obsahuje údaje popisujúce tvar na tretej pozícii.

SegmentZačaťKoniec
XrzXrz
A45-26-523419-38
B3419-382336
C.233634-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
Ja-12-49-20-2-33-66
Tabuľka 3: Údaje pre jednoduchý tvar - tretia pozícia

Applet na obrázku 8 zobrazuje to, čo by sme videli.

Ak chcete vidieť tento applet, potrebujete prehliadač s podporou Java.Obrázok 8: Jednoduchý tvar - tretia pozícia

Balenie

Teraz ste už pravdepodobne prišli na to, že ručná zmena orientácie objektu nie je veľká zábava. A výsledok tiež nie je veľmi interaktívny. Budúci mesiac vám ukážem, ako interaktívne manipulovať s objektmi (a prinútime počítač, aby zvládol všetky problémy s počtom čísel - koniec koncov, nie je to tak, že typ pracovných počítačov má byť dobrý?). Taktiež sa pozrieme na problém perspektívy - predovšetkým vám ukážem, ako ho začleniť do pohľadov na náš model.

Todd Sundsted píše programy od chvíle, keď boli počítače k ​​dispozícii v stolných modeloch. Aj keď sa Todd pôvodne zaujímal o budovanie aplikácií distribuovaných objektov v C ++, prešiel na programovací jazyk Java, keď sa Java stala jasnou voľbou pre tento druh vecí. Todd je spoluautorom Java Language API SuperBible, ktorý je teraz v kníhkupectvách všade. Okrem písania je Todd prezidentom spoločnosti Etcee a poskytuje školenia, mentorstvo a konzultácie zamerané na jazyk Java.

Získajte viac informácií o tejto téme

  • Trochu všetkého, čo súvisí s 3D grafikou, nájdete na:

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

  • Yahoo poskytuje pohodlný spôsob, ako zahájiť vyhľadávanie tém 3D grafiky

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

  • Tento článok, zdrojový kód a súbory triedy si môžete stiahnuť ako súbor tar vo formáte gzip:

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

  • Predchádzajúce články o postupe v jazyku Java
  • „Keď statické obrázky nestačia na zníženie“ - Naučte sa, ako okoreniť svoje applety a aplikácie

    s animovanými obrázkami.

  • „Ako Java používa na spracovanie obrázkov model producent / spotrebiteľ - Pohľad zasvätenca“ - Dozviete sa viac o výkonnej technike manipulácie s obrázkami v Java, potom postupujte podľa mojich jednoduchých postupov pre zostavenie vašich vlastných producentských a spotrebiteľských komponentov.
  • „Dozviete sa, ako applety asynchrónne načítavajú obrázky založené na sieti“ - tu je podrobný pohľad na to, ako applety Java spracovávajú obrázky v sieťovom prostredí.
  • „Kreslenie textu je jednoduché pomocou troch tried Java“ - Zistite, ako vytvoriť text, ktorý je vizuálne príťažlivý, prostredníctvom tohto vysvetlenia, aké triedy majú byť použité a ako spolupracujú.
  • „Preskúmanie HotSpotu, objektovo-orientovaného kresliaceho programu“ - Naučte sa, ako jednotlivé časti jazyka Java a knižnice tried do seba zapadajú pri štúdiu tejto Javy. program
  • „Používanie triedy Grafika“ - Bližší pohľad na triedu Grafika a na základné kresby, ktoré poskytuje, a ukážka jej použitia.
  • „Observer and Observable“ - Úvod do rozhrania Observer a triedy Observable s využitím architektúry Model / View / Controller ako pomôcka.
  • „Efektívne používateľské rozhranie“ - Úvod do rozhrania Observer a triedy Observable, ktoré slúžia ako pomôcka pre architektúru Model / View / Controller.
  • „Java a spracovanie udalostí“ - Ako sa udalosti odovzdávajú komponentom používateľského rozhrania, ako vytvoriť obslužné programy udalostí a ďalšie.
  • „Úvod do AWT“ - popis súpravy nástrojov používateľského rozhrania Java.

Tento príbeh „3D počítačová grafika: Modelujte svoj svet“ pôvodne publikoval vydavateľstvo JavaWorld.

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