Programovanie

Programovanie 3D grafiky v prostredí Java, časť 1: Java 3D

Aby bolo možné vybudovať skutočnú platformu Java, spoločnosť Sun si skoro uvedomila, že je potrebné doplniť obrázok API nad rámec obmedzených funkcií dostupných v základnej platforme Java 1.0. Sun veľmi rozšíril svoje jadro s vydaním 1.1 a blížiacim sa 1.2, stále však v puzzle Java chýbajú niektoré kúsky.

Spoločnosť Sun a jej partneri vyvinuli rozhrania Java Media and Communication API, aby poskytli chýbajúce kúsky multimediálneho programovania. Dva z najväčších diel, 2D a 3D grafika, sú zamerané na API Java 2D a 3D. Java 2D je rozhranie API základnej platformy počnúc jazykom Java 1.2, zatiaľ čo Java 3D bude vydaná ako rozšírenie API krátko po sprístupnení platformy 1.2. Nedávno sme dokončili sériu stĺpcov v prostredí Java 2D; Teraz obrátime našu pozornosť na Java 3D.

Java 3D má dať vývojárom v Java schopnosť písať applety a aplikácie, ktoré poskytujú používateľom trojrozmerný interaktívny obsah. Sun má v tejto aréne silnú konkurenciu z iných 3D grafických technológií a Java 3D má pred sebou ťažký boj, ak má poraziť zavedený grafický štandard OpenGL.

Žiadosť o komentáre čitateľov k API 3D grafiky pre Javu naznačila vážny záujem o väzby Java 3D a Java OpenGL, preto som sa rozhodol sústrediť svoje úsilie na tieto technológie v nasledujúcich mesiacoch.

Obmedzenejšie množstvo záujmu bolo vyjadrené vo VRML. V dôsledku toho sa budem zaoberať VRML demonštráciou jeho použitia v prostredí Java 3D pomocou načítavačov obsahu VRML97 a prehliadača Java 3D VRML97. Direct3D sa tešil veľmi malému záujmu, takže som sa rozhodol nepokračovať touto cestou, okrem zmienky o tom, kde ju môže podporovať alebo spolupracovať niektorá z ďalších technológií.

Výhody a nevýhody Java 3D

Tento mesiac začíname našu prehliadku 3D grafických rozhraní API pre Javu preskúmaním Java 3D. Začneme rozobratím niektorých hlavných silných a slabých stránok API. 3D grafika môže niekedy pôsobiť dosť tupo, a preto je ťažké ju vysvetliť. Ak máte nejaké pretrvávajúce nejasnosti v súvislosti s mojimi príkladmi alebo vysvetleniami, neváhajte a napíšte mi so svojimi otázkami alebo komentármi. Snažím sa ich vyriešiť.

Predajné miesta pre Java 3D:

  • Poskytuje vysokoúrovňový objektovo orientovaný pohľad na 3D grafiku. Java 3D to čiastočne dosahuje použitím a scénický graf- založený 3D grafický model. (O tomto koncepte sa budeme podrobnejšie rozprávať ďalej v článku.) Tento prístup má pomôcť programátorom, ktorí nemajú veľké skúsenosti s programovaním grafiky alebo multimédií, používať vo svojich aplikáciách 3D. V ostrom kontraste s procedurálnymi 3D API nižšej úrovne, ako je OpenGL, ktoré sú navrhnuté tak, aby optimalizovali čo najlepšiu rýchlosť a poskytovali programátorom čo najväčšiu kontrolu nad procesom vykresľovania, má byť Java 3D dostatočne jednoduchá pre každého skúseného programátora Java, aby učiť sa.

  • Ak nepotrebujete prístup na nízku úroveň k operáciám vykresľovania, môže byť na výber Java 3D. Prístup na vykreslenie je obmedzený na žiadosti prostredníctvom atribúty a bitov schopností, podobnou formou a funkciou ako rady pri vykresľovaní Java 2D. (Odkazy na moje predchádzajúce série o prostredí Java 2D nájdete v časti Zdroje, ktorá obsahovala diskusiu a príklady rád pri vykresľovaní 2D).

  • Java 3D je optimalizovaná na rýchlosť, kde je to možné. Modul runtime v skutočnosti využíva bity schopnosti vykresľovania na optimalizáciu grafu scény pre čo najrýchlejšie vykreslenie. Tento prístup umožňuje, aby bola Java 3D použiteľnejšia v interaktívnych grafických prostrediach (hry, simulácie, situácie s nízkou latenciou) ako v prípade vysoko kvalitných offline grafických aplikácií (napríklad renderovacích fariem).

  • K dispozícii je veľký a rastúci počet 3D nakladačov na import obsahu do prostredia Java 3D runtime. Spoločnosť Sun bezplatne sprístupnila program na načítanie súborov a prehliadač Java 3D VRML97 s kódom. Hľadajte budúci mesiac Programovanie médií stĺpec preskúmať Java 3D nakladače podrobnejšie.

  • Java 3D vyžaduje možnosti vektorovej matematiky, ktoré nie sú k dispozícii inde na platforme Java. Tieto matematické operácie sa v súčasnosti nachádzajú v javax.vecmath balíka a v budúcnosti sa môže presunúť na základnú platformu.

  • Java 3D podporuje množstvo exotických zariadení (napríklad prútiky, dátové rukavice a náhlavné súpravy). The com.sun.j3d.utils.trackers balík zahrnutý do implementácie spoločnosti Sun poskytuje triedy pre zariadenia Fakespace, Logitech a Polhemus. Tieto zariadenia však nie sú veľmi využívané, takže ich nebudem veľmi podrobne rozoberať. Ak sa chcete dozvedieť viac informácií o podpore zariadení, pozrite si stránky Java 3D spoločnosti Sun a archív konferencie Java 3D (obidve dostupné z hlavných adries URL Sun Java 3D zahrnutých v nižšie uvedených zdrojoch).

Java 3D má veľa výhod, ale čo je proti? Zahŕňajú:

  • Java 3D je štandardné rozšírenie API. Držitelia licencií na platformu Java majú možnosť implementovať API, ak sa im páči, nie sú však povinní ich implementovať. Umiestnenie Java 3D ako štandardného rozšírenia riskuje zníženie prenosnosti kódu Java 3D naprieč platformami - väčšina predajcov musí bojovať so zmenami a doplnkami samotnej základnej platformy.

  • Java 3D má vážne obmedzenia dostupnosti. Sú výsledkom stavu Java 3D ako rozšírenia API. Jediným významným dodávateľom, ktorý v súčasnosti poskytuje implementáciu Java 3D, je spoločnosť Sun s implementáciami pre systémy Solaris a Win32. V porovnaní s OpenGL, ktorý je k dispozícii pre všetky verzie Unixu, Windows a mnohých ďalších operačných systémov, vyzerá prenosnosť kódu Java 3D na rôzne platformy otázne.

  • Spolu s problémami s dostupnosťou softvéru prichádzajú aj nedostatky v dokumentácii. Spoločnosť Sun vynakladá statočné úsilie na zabezpečenie školení vývojárov a podpory pre Java 3D, v porovnaní so zvyškom priemyselného úsilia v oblasti dokumentovania OpenGL a jeho používania však stále zaostáva. Webová stránka OpenGL Consortium je oveľa hlbšia a širšia ako všetko, čo sa Sunu doteraz podarilo pre Java 3D zostaviť. Toto nie je nepodstatný bod: vďaka relatívnej zložitosti rozhraní API pre 3D grafiku je dobrá dokumentácia nevyhnutnosťou.

  • Java 3D pred vývojárom skrýva podrobnosti vykresľovacieho potrubia. Pretože Java 3D je API na vysokej úrovni, zámerne skrýva pred vývojárom podrobnosti o vykresľovacom potrubí, čo ho robí nevhodným pre veľké množstvo problémov, kde sú tieto podrobnosti dôležité. (O modeli nižšej úrovne OpenGL a prístupe k vykresľovaciemu kanálu budeme diskutovať neskôr v tejto sérii 3D.)

  • Komponenty Java 3D sú ťažké. To znamená, že majú natívneho (nie Java) partnera, ktorý vykreslenie skutočne robí. To môže komplikovať váš vývoj grafického používateľského rozhrania, ak používate Java Swing a jeho all-Java alebo ľahké komponenty. Existuje niekoľko špeciálnych riešení, ale ľahké a ťažké komponenty sa všeobecne nemiešajú dobre v rovnakých kontajnerových objektoch a oknách. Ďalšie informácie o problémoch s ľahkými a ťažkými komponentmi sú k dispozícii v zdrojoch na konci tohto článku.

Inštalácia Java 3D

Teraz, keď rozumieme hlavným vlastnostiam a obmedzeniam Java 3D, poďme sa pripraviť na vyskúšanie niektorých príkladov kódu.

Java 3D je k dispozícii v beta verzii pre systémy Win32 a Solaris. Vyspelejšie implementácie Java 3D od spoločnosti Sun sú postavené na vrchole OpenGL. Pre Win32 je k dispozícii aj implementácia Direct3D v alfa kvalite. Všetky vyžadujú Java 1.2, pričom najnovšia beta verzia Java 3D zodpovedá Java 1.2 Beta 4. Spoločnosť Sun sľúbila vydanie finálnej implementácie Java 3D krátko po vydaní verzie Java 1.2, ktorá je v súčasnosti naplánovaná na december 1998.

Trochu mätúce stranou: Spoločnosť Sun vydala implementácie Java 3D 1.0 alfa, ktoré zodpovedali rozhraniu Java 3D 1.0 API, ale pre rozhranie API 1.0 nikdy nevydali nič okrem alfa. Sun potom upravil API, pričom upravenú verziu vydal ako API Java 3D 1.1. Po tejto verzii nasledovali vydania takzvanej implementácie verzie 1.1 beta, zatiaľ dve. Spoločnosť Sun sľúbila vydanie finálneho API a implementácie krátko po finálnom vydaní platformy Java 1.2. Dúfajme, že sa API stabilizovalo a nebude sa revidovať, opäť, zatiaľ čo svet stále čaká na bonafidné konečné vydanie implementácie.

Pretože sa väzbám Java OpenGL budeme venovať v budúcom stĺpci, rozhodol som sa, že v tomto návode na inštaláciu tiež zlacniem a použijem verziu Java 3D OpenGL. Ak si nainštalujete verziu OpenGL na použitie s týmito príkladmi Java 3D, budete mať knižnice vykresľovania, ktoré budete potrebovať, aby príklady Java-OpenGL prišli neskôr.

Softvérové ​​komponenty, ktoré potrebujete na použitie Java 3D, sú:

  • Modul Java 3D runtime, dostupný od spoločnosti Sun (vyžaduje sa bezplatné prihlásenie pomocou Java Developer Connection). Uistite sa, že ste si pre svoju platformu vybrali OpenGL verziu Java 3D (používam program Win32). Odteraz je najnovšia verzia Win32 Java 3D pre OpenGL 1.1 Beta 2 v súbore java3d11-beta2-win32-opengl.exe a váži približne 1,7 MB.

  • OpenGL 1.1, dodávaný s Windows NT 4.0 a Windows 95 OSR 2. Ak máte vydanie OSR 1 pre Windows 95, môžete si stiahnuť podporu OpenGL. Najnovšia implementácia systému Windows 95-OpenGL 1.1 je k dispozícii od spoločnosti Microsoft ako opengl95.exe a má približne 0,5 MB.

  • Java 1.2, dostupná od spoločnosti Sun. (Upozorňujeme, že keď píšem toto, spoločnosť Sun vydala novú verziu Java 1.2 - Release Candidate 1. Príklady budú pre najnovšie vydanie aktualizované čo najskôr.) Java 3D je spojená s platformou 1.2 a spoločnosť Sun uviedla na zoznam adries java3d-interest, že nemá záujem na odpojení API a pokuse o jeho sprístupnenie s predchádzajúcimi vydaniami platforiem.

Voliteľne si môžete tiež stiahnuť dokumentáciu v Java 3D a ukážkový kód. Oba sú dostupné z rovnakého odkazu ako runtime Java 3D.

Pamätajte, že už nemusíte nastavovať premenné prostredia CLASSPATH, aby vaše spustiteľné súbory Java alebo appletviewer našli knižnice rozšírení. S programom Java 1.2 vytvoril Sun konečne štandardný adresár rozšírenia. Tento adresár sa nachádza na / jre / lib / ext / v rámci vášho inštalačného adresára JDK. Napríklad v mojom systéme je Java 1.2 Beta 4 nainštalovaná na adrese:

C: \ jdk1.2beta4 \

a štandardný adresár rozšírenia sa nachádza na adrese:

C: \ jdk1.2beta4 \ jre \ lib \ ext \

Všetky knižnice rozšírení by mali umiestniť svoje archívy jar do tohto adresára rozšírení v čase inštalácie a všetky štandardné nástroje JDK vedia, že tu majú vyhľadať potrebné súbory triedy.

V prípade Java 3D od spoločnosti Sun obsahujú tieto archívy verejné (dokumentované v špecifikácii Java 3D API) aj súkromné ​​(špecifické pre implementáciu Sun) triedy. Medzi archívy verejných tried patria:

  • j3dcore.jar - Obsahuje súbory triedy pre verejný balík Java 3D javax.media.j3d.

  • vecmath.jar - Obsahuje triedy pre javax.vecmath.

Medzi súkromné ​​archívy patria:

  • j3daudio.jar - Archív com.sun.j3d.audio triedy, ktoré stavajú podporu pre priestorový zvuk nad vlastnú kópiu časti Java zvukového modulu Java Sound založeného na Headspace, debutujúceho v prostredí Java 1.2.

  • j3dutils.jar - Zapuzdruje rôzne triedy obslužných programov Sun do 16 celkových balíkov a čiastkových balíkov pod ním com.sun.j3d. Hlbšie sa budem venovať týmto balíkom v budúcom mesiaci pokračovania našej diskusie o Java 3D.

  • j3dutilscontrib.jar - Archivuje užitočné nástroje prispievané ostatnými k úsiliu spoločnosti Sun. Pod balíkom je sedem balíkov com.sun.j3d hierarchia vrátane com.sun.j3d.utils.trackers vyššie uvedený kód. Stĺpec budúci mesiac opäť poskytne viac informácií o balíkoch v tomto jar.

Vezmite prosím na vedomie, že teoreticky môžete vytvoriť inštanciu a zavolať metódy na ktorejkoľvek z tried poskytovaných v neštandardných balíkoch ako com.sun, ale upozorniť emptor: Neexistuje žiadna záruka, že budú k dispozícii na platforme, na ktorej je spustený váš kód. V súčasnej praxi je Java 3D dostupná iba od spoločnosti Sun, takže veľa vývojárov v skutočnosti používa triedy v súkromných archívoch spoločnosti Sun. Mali by ste si byť vedomí možného kompromisu v oblasti prenosnosti, ktorý s tým súvisí.

Nie je žiadnym kúzlom v tom, ako verejné a súkromné ​​triedy Java 3D pracujú so systémovými prostriedkami. Spoločnosť Sun inštaluje natívne knižnice do systému Windows J3D.dll a j3daudio.dll pod / jre / bin / adresár. Triedy Java 3D používajú natívne metódy na volanie týchto DLL a vytvárajú rozhranie s platformou Win32 a knižnicou vykresľovania OpenGL. (Podobné knižnice existujú pre implementácie systému Solaris.)

Posledná poznámka k inštalácii: Renderovací kanál OpenGL je navrhnutý tak, aby využíval výhody akceleračného hardvéru OpenGL na zrýchlenie vašich grafických aplikácií. Na účely tohto stĺpca by ste však mali mať možnosť experimentovať s príkladmi bez použitia špeciálneho hardvéru. (V skutočnosti vyvíjam všetky príklady na notebooku Pentium 150 MHz MMX bez hardvéru na akceleráciu OpenGL.) Ak máte záujem o akceleračné karty, mali by ste sa obrátiť na webovú stránku OpenGL alebo na zoznam adries Java 3D ( ďalšie informácie. Mám v pláne zahrnúť trochu viac informácií aj do stĺpca Java 3D na budúci mesiac o akceleračnom hardvéri.

Konštrukcia vetvy pohľadu na scénu

Ako som už uviedol vyššie, jednou z najväčších silných stránok scénický graf grafický model je v tom, že umožňuje neskúseným grafickým programátorom pridávať do svojich aplikácií 3D. 3D programátori tradične museli určiť, kde a ako sa majú nakresliť jednotlivé čiary alebo iné grafické primitívy. Pomocou scénického grafu však programátor jednoducho vytvorí stromovú štruktúru obsahujúcu uzly, ktoré reprezentujú objekty, ktoré sa majú vykresliť, ako aj pokyny na vykreslenie (napríklad miesto, kde sa nachádza hľadisko zobrazené na monitore, fyzická geometria 3D sveta, kde programátor je. a relatívna vzdialenosť medzi vecami).

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