Programiranje

Programiranje 3D grafike v Javi, 1. del: Java 3D

Da bi zgradil resnično platformo Java, je Sun že zgodaj spoznal, da mora izpolniti sliko API-ja, ki presega omejeno funkcionalnost, ki je na voljo v osnovni platformi Java 1.0. Sun je močno razširil jedro z izdajami 1.1 in bližnjimi 1.2, vendar v sestavljanki Java še vedno manjka nekaj kosov.

Sun in njegovi partnerji so razvili Java Media and Communication API-je, da bi zagotovili manjkajoče multimedijske programske dele. Dva največja dela, 2D in 3D grafika, sta usmerjena v Java 2D oziroma 3D API-je. Java 2D je API osnovne platforme, ki se začne z Javo 1.2, medtem ko bo Java 3D izdan kot razširitveni API kmalu po tem, ko bo na voljo platforma 1.2. Pred kratkim smo zaključili vrsto stolpcev o Javi 2D; zdaj pozornost usmerimo na Java 3D.

Java 3D naj bi razvijalcem Java omogočil pisanje apletov in aplikacij, ki uporabnikom zagotavljajo tridimenzionalno interaktivno vsebino. Sun ima v tej areni nekaj močne konkurence pri drugih tehnologijah 3D grafike, Java 3D pa čaka težka bitka, če želi premagati veljavni grafični standard OpenGL.

Zahteva za komentarje bralcev o API-jih za 3D grafiko za Javo je pokazala resno zanimanje za vezi 3D Java in Java OpenGL, zato sem se odločil, da bom v naslednjih mesecih svoja prizadevanja usmeril v te tehnologije.

V VRML je bilo izraženo bolj omejeno zanimanje. Zato se bom ukvarjal z VRML, tako da bom prikazal njegovo uporabo v Java 3D z nalagalci vsebin VRML97 in Sunovim brskalnikom Java 3D VRML97. Direct3D je bil deležen zelo malo zanimanja, zato sem se odločil, da ne bom nadaljeval te poti, razen omeniti, kje katera od drugih tehnologij lahko podpira ali sodeluje z njo.

Prednosti in slabosti Java 3D

Ta mesec začnemo z ogledom API-jev 3D grafike za Javo z raziskovanjem Java 3D. Začeli bomo z razpravo o nekaterih glavnih prednostih in slabostih API-ja. 3D-grafika se včasih zdi precej motna in je zato težko razložljiva. Če imate kakršno koli dolgočasno zmedo glede mojih primerov ali razlag, mi pišite s svojimi vprašanji ali komentarji in potrudil se bom, da jih rešim.

Prodajna mesta za Java 3D:

  • Omogoča objektno usmerjen pogled 3D grafike na visoki ravni. Java 3D to deloma doseže z uporabo graf scene3D grafični model. (O tem konceptu bomo podrobneje razpravljali v nadaljevanju članka.) Ta pristop naj bi pomagal programerjem, ki nimajo veliko grafičnih izkušenj ali izkušenj z večpredstavnostnim programiranjem, da uporabljajo 3D v svojih aplikacijah. V popolnem nasprotju s postopkovnimi 3D-API-ji na nižji ravni, kot je OpenGL, ki so zasnovani tako, da optimizirajo za najboljšo možno hitrost in programerjem omogočijo največji možen nadzor nad postopkom upodabljanja, naj bi bil Java 3D dovolj preprost, da ga lahko izkušen programer Java naučiti se.

  • Če ne potrebujete dostopa do upodabljanja na nizki ravni, je morda na voljo Java 3D. Dostop do upodabljanja je omejen na zahteve prek lastnosti in bitov zmogljivosti, podobno po obliki in funkciji namigi za upodabljanje Java 2D. (Glejte Vire za povezave do moje prejšnje serije o Javi 2D, ki je vključevala razpravo in primere namigov za upodabljanje 2D).

  • Java 3D je optimiziran za hitrost, kjer je to mogoče. Izvajalno okolje dejansko uporablja bite zmožnosti upodabljanja, da optimizira graf scene za najhitrejše možne upodobitve. S tem pristopom je Java 3D bolj uporaben za interaktivna grafična okolja (igre, simulacije, situacije z nizko zakasnitvijo) kot za visokokakovostne grafične aplikacije brez povezave (kot so farme za upodabljanje).

  • Na voljo je veliko in vedno večje število 3D nalagalcev za uvoz vsebin v izvajalno okolje Java 3D. Sun je ustvaril Java 3D VRML97 nalagalnik datotek in brskalnik, ki sta prosto dostopna s kodo. Poiščite prihodnji mesec Programiranje medijev stolpec za podrobnejše raziskovanje nalagalnikov Java 3D.

  • Java 3D zahteva vektorske matematične zmožnosti, ki niso na voljo drugje na platformi Java. Te matematične operacije se trenutno nahajajo v javax.vecmath paket in ga bo v prihodnosti mogoče premakniti v osrednjo platformo.

  • Java 3D podpira številne eksotične naprave (na primer palice, podatkovne rokavice in slušalke). The com.sun.j3d.utils.trackers Paket, ki je vključen v Sunjevo izvedbo, ponuja razrede za naprave Fakespace, Logitech in Polhemus. Te naprave pa se ne uporabljajo široko, zato jih ne bom podrobno obravnaval. Če želite izvedeti več o podpori naprav, si oglejte spletna mesta Sun Java Java in arhiv poštnih seznamov Java 3D (oba sta na voljo v glavnih URL-jih Sun Java 3D, vključenih v spodnje vire).

Java 3D ima veliko prednosti, kaj pa slabosti? Vključujejo:

  • Java 3D je standardni API za razširitve. Imetniki licence za platformo Java imajo možnost, da API implementirajo, če jim je všeč, vendar jih ni treba izvajati. Pozicioniranje Java 3D kot standardne razširitve tvega zmanjšanje prenosljivosti kode Java 3D na različnih platformah - večina prodajalcev se mora truditi, da bi sledila spremembam in dopolnitvam osnovne platforme.

  • Java 3D ima resne omejitve glede razpoložljivosti. To so rezultat stanja Java 3D kot razširitvenega API-ja. Edini večji prodajalec, ki trenutno ponuja Java 3D izvedbo, je Sun z izvedbami za Solaris in Win32. V primerjavi z OpenGL, ki je na voljo za vsak okus Unixa, Windows in mnogih drugih operacijskih sistemov, je prenosljivost Java 3D kode na več platformah vprašljiva.

  • Skupaj s težavami z razpoložljivostjo programske opreme prihaja do pomanjkanja dokumentacije. Sun si močno prizadeva zagotoviti izobraževanje in podporo za razvijalce Java 3D, vendar še vedno zaostaja v primerjavi s preostalimi prizadevanji industrije pri dokumentiranju OpenGL in njegove uporabe. Spletno mesto konzorcija OpenGL je veliko globlje in širše od vsega, kar je Sun doslej uspelo sestaviti za Java 3D. To ni manj pomembno: sorazmerna zapletenost 3D-grafičnih API-jev zahteva dobro dokumentacijo.

  • Java 3D od razvijalca skrije podrobnosti o cevovodu upodabljanja. Ker je Java 3D API na visoki ravni, razvijalcu namerno skrije podrobnosti cevovoda upodabljanja, zaradi česar je neprimeren za večje število težav, kjer so take podrobnosti pomembne. (O modelu OpenGL na nižji ravni in dostopu do cevovoda za upodabljanje bomo razpravljali kasneje v tej seriji 3D.)

  • Komponente Java 3D so težke. To pomeni, da imajo domači (ne-Java) vrstnik, ki dejansko izvaja upodabljanje. To vam lahko oteži razvoj grafičnega uporabniškega vmesnika, če uporabljate Java Swing in njegove v celoti Java ali lahke komponente. Obstaja nekaj posebnih rešitev, vendar se na splošno lahke in težke komponente v istih predmetih in oknih posod ne mešajo dobro. Več informacij o težavah z lahkimi in težkimi komponentami je na voljo v virih na koncu tega članka.

Namestitev Java 3D

Zdaj, ko razumemo glavne značilnosti in omejitve Java 3D, se pripravimo na preizkus nekaj primerov kode.

Java 3D je na voljo v različici beta za Win32 in Solaris. Zrelejše Sun-ove izvedbe Java 3D so zgrajene na vrhu OpenGL. Za Win32 je na voljo tudi izvedba Direct3D alfa kakovosti. Vsi potrebujejo Javo 1.2, pri čemer najnovejša Java 3D beta ustreza Java 1.2 Beta 4. Sun je obljubil, da bo izdal končno implementacijo Java 3D kmalu po tem, ko bo izdal Javo 1.2, ki je trenutno predvidena za december 1998.

Nekoliko zmedeno: Sun je izdal izvedbe alfa Java 3D 1.0 alfa, ki ustreza API-ju Java 3D 1.0, vendar nikoli ni izdal ničesar drugega kot alfa za API 1.0. Sun je nato spremenil API in izdal spremenjeno različico kot Java 3D 1.1 API. To različico so spremljale izdaje tako imenovane 1.1 beta izvedbe, dve do zdaj. Sun je obljubil, da bo izdal končni API in izvedbo kmalu po končni izdaji platforme Java 1.2. Upajmo, da se je API stabiliziral in ga ne bo treba ponovno popraviti, svet pa še vedno čaka na bonafidno končno izdajo izvedbe.

Ker bomo v prihodnjem stolpcu pokrivali vezi Java OpenGL, sem se tudi v teh navodilih za namestitev odločil, da prihranim in uporabim različico Java 3D OpenGL. Če namestite različico OpenGL za uporabo s temi primeri Java 3D, boste imeli knjižnice upodabljanja, ki jih potrebujete, da bodo primeri Java-OpenGL pozneje prišli.

Programske komponente, ki jih potrebujete za uporabo Java 3D, so:

  • Izvajanje Java 3D, na voljo pri Sun (potrebna je brezplačna prijava za Java Developer Connection). Za svojo platformo izberite različico Java 3D OpenGL (uporabljam Win32). Trenutno je najnovejša Win32 Java 3D za OpenGL 1.1 Beta 2 v java3d11-beta2-win32-opengl.exe in tehta približno 1,7 MB.

  • OpenGL 1.1 v paketu z operacijskim sistemom Windows NT 4.0 in Windows 95 OSR 2. Če pa imate OSR 1, izdajo sistema Windows 95, lahko prenesete podporo za OpenGL. Najnovejša izvedba sistema Windows 95-OpenGL 1.1 je na voljo pri Microsoftu pod imenom opengl95.exe in znaša približno 0,5 MB.

  • Java 1.2, na voljo pri Sun. (Upoštevajte, da je Sun, ko to pišem, izdal novo Java 1.2 - Release Candidate 1. Primeri bodo posodobljeni za najnovejšo izdajo čim prej.) Java 3D je povezan s platformo 1.2 in Sun je izjavil na java3d-interest poštni seznam, da ga ne zanima ločevanje API-ja in poskušanje, da bi bil na voljo s prejšnjimi izdajami platforme.

Po želji boste morda želeli prenesti tudi Java dokumentacijo 3D in primer kode. Oba sta na voljo na isti povezavi kot izvajalno okolje Java 3D.

Upoštevajte, da vam ni treba več nastavljati spremenljivk okolja CLASSPATH, da bodo izvršljive datoteke java ali appletviewer našle knjižnice razširitev. Z Java 1.2 je Sun končno ustvaril standardni imenik razširitev. Ta imenik se nahaja na / jre / lib / ext / v vašem namestitvenem imeniku JDK. Na primer, v mojem sistemu je Java 1.2 Beta 4 nameščena na:

C: \ jdk1.2beta4 \

in standardni imenik razširitev je na:

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

Vse knjižnice razširitev bi morale v času namestitve shraniti svoje arhive jarov v ta imenik razširitev, vsa standardna orodja JDK pa znajo tukaj iskati potrebne datoteke razredov.

Za Sunov Java 3D ti arhivi vključujejo tako javne (dokumentirane v specifikaciji Java 3D API) kot zasebne razrede (specifične za izvajanje Sun-a). Arhivi javnih razredov vključujejo:

  • j3dcore.jar - Vsebuje datoteke razredov za javni paket Java 3D javax.media.j3d.

  • vecmath.jar - Vsebuje razrede za javax.vecmath.

Zasebni arhivi vključujejo:

  • j3daudio.jar - Arhivira com.sun.j3d.audio razredi, ki gradijo podporo za prostorski zvok na vrhu kopije dela Java dela Java Sound, zvočni mehanizem, ki temelji na Headspaceu in je prvič predstavljen v Javi 1.2.

  • j3dutils.jar - Vključuje različne razrede pripomočkov Sun v 16 celotnih paketov in podpaketov spodaj com.sun.j3d. Poglobil se bom v te pakete v nadaljevanju razprave o Java 3D naslednjega meseca.

  • j3dutilscontrib.jar - Arhivira koristne pripomočke, ki so jih za prizadevanja podjetja Sun prispevali drugi. Pod paketom je sedem paketov com.sun.j3d hierarhija, vključno z com.sun.j3d.utils.trackers zgoraj omenjena koda. Tudi v stolpcu za naslednji mesec bomo našli več informacij o paketih v tem kozarcu.

Upoštevajte, da lahko teoretično ustvarite in pokličete metode za kateri koli razred, ki je na voljo v nestandardnih paketih, kot je com.sun, ampak opozorilo emptor: Ni zagotovila, da bodo na voljo na platformi, na kateri se izvaja vaša koda. V trenutni praksi je Java 3D na voljo samo pri podjetju Sun, zato veliko razvijalcev dejansko uporablja razrede v zasebnih arhivih podjetja Sun. Zavedati se morate morebitnih kompromisov pri prenosljivosti, ki jih prinaša odločitev za to.

Tudi v tem, kako se javni in zasebni razredi Java 3D predavajo s sistemskimi viri, prav tako ni čarobno. Sun namesti izvorne knjižnice v J3D.dll in j3daudio.dll pod / jre / bin / imenik. Razredi Java 3D uporabljajo izvorne metode za klic teh DLL-jev in vmesnik s platformo Win32 in knjižnico upodabljanja OpenGL. (Podobne knjižnice obstajajo za implementacije Solarisa.)

Še zadnja opomba o namestitvi: Cevovod upodabljanja OpenGL je zasnovan tako, da izkorišča strojno opremo za pospeševanje OpenGL za pospešitev vaših grafičnih aplikacij. Za namene tega stolpca pa bi morali biti sposobni eksperimentirati s primeri brez posebne strojne opreme. (Pravzaprav vse primere razvijam na prenosnem računalniku Pentium 150 MHz MMX brez pospeševalne strojne opreme OpenGL.) Če vas zanimajo pospeševalne kartice, se obrnite na spletno mesto OpenGL ali poštni seznam Java 3D ( glejte Viri) za več informacij. V prihodnji mesec nameravam v stolpec Java 3D vključiti tudi stolpec o pospeševalni strojni opremi.

Konstruiranje razgledne veje scene

Kot sem že omenil, je ena največjih prednosti graf scene grafični model je, da neizkušenim grafičnim programerjem omogoča, da svojim aplikacijam dodajo 3D. Tradicionalno so morali programerji 3D določiti, kje in kako naj se narišejo posamezne črte ali drugi grafični primitivi. Z uporabo grafa scene pa programer preprosto ustvari drevesno strukturo, ki vsebuje vozlišča, ki predstavljajo predmete, ki jih je treba upodabljati, in navodila za upodabljanje (na primer, kje se nahaja pogled, prikazan monitorju, fizična geometrija 3D sveta, programer ustvarja in relativne razdalje med stvarmi).

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