Programmēšana

3D grafikas programmēšana Java, 1. daļa: Java 3D

Lai izveidotu patiesu Java platformu, Sun jau agri saprata, ka tai ir jāaizpilda API attēls, pārsniedzot ierobežoto funkcionalitāti, kas pieejama Java 1.0 pamatplatformā. Saule ir ļoti daudz izkopusi kodolu ar 1.1 un gaidāmajiem 1.2 izlaidumiem, taču Java mīklā joprojām ir daži gabali.

Sun un tā partneri izstrādāja Java Media un Communication API, lai nodrošinātu trūkstošos multimediju programmēšanas elementus. Divi no lielākajiem gabaliem, 2D un 3D grafika, ir mērķēti ar attiecīgi Java 2D un 3D API. Java 2D ir pamata platformas API, kas sākas ar Java 1.2, savukārt Java 3D tiks izlaists kā paplašinājuma API neilgi pēc tam, kad būs pieejama 1.2 platforma. Mēs nesen pabeidzām virkni kolonnu Java 2D; tagad mēs pievēršam uzmanību Java 3D.

Java 3D mērķis ir dot Java izstrādātājiem iespēju rakstīt sīklietotnes un lietojumprogrammas, kas lietotājiem nodrošina trīsdimensiju interaktīvu saturu. Saulei šajā arēnā ir liela konkurence ar citām 3D grafikas tehnoloģijām, un Java 3D priekšā ir augšupvērsta cīņa, ja tā pārspēs pašreizējo grafikas standartu OpenGL.

Pieprasījums pēc lasītāju komentāriem par Java 3D grafikas saskarnēm liecināja par nopietnu interesi par Java 3D un Java OpenGL stiprinājumiem, tāpēc nākamajos mēnešos esmu nolēmis koncentrēt spēkus šīm tehnoloģijām.

VRML izteica ierobežotāku interesi. Līdz ar to es nodarbošos ar VRML, demonstrējot tā izmantošanu Java 3D ar VRML97 satura iekrāvējiem un Sun Java Java VRML97 pārlūku. Direct3D saņēma ļoti mazu interesi, tāpēc esmu nolēmis turpināt šo ceļu, izņemot to, lai minētu, kur kāda no pārējām tehnoloģijām to var atbalstīt vai mijiedarboties.

Plusi un mīnusi Java 3D

Šajā mēnesī mēs sākam Java 3D grafisko API saskarni, izpētot Java 3D. Mēs sāksim apspriest dažus galvenos API stiprās un vājās puses. 3D grafika dažreiz var šķist diezgan izplūdusi, un tāpēc to var būt grūti izskaidrot. Ja jums ir ilgstoša neskaidrība par maniem piemēriem vai paskaidrojumiem, lūdzu, rakstiet man ar saviem jautājumiem vai komentāriem, un es darīšu visu iespējamo, lai tos risinātu.

Java 3D pārdošanas punkti:

  • Tas nodrošina augsta līmeņa objektorientētu 3D grafikas skatu. Java 3D to daļēji paveic, izmantojot a ainas grafiksbalstīts 3D grafikas modelis. (Mēs šo rakstu sīkāk apspriedīsim vēlāk rakstā.) Šī pieeja ir paredzēta, lai palīdzētu programmētājiem, kuriem nav lielas grafikas vai multimediju programmēšanas pieredzes, izmantot 3D savās lietojumprogrammās. Krasi atšķirībā no zemāka līmeņa procesuālajām 3D saskarnēm, piemēram, OpenGL, kuras ir izstrādātas, lai optimizētu pēc iespējas lielāku ātrumu un programmētājiem sniegtu pēc iespējas lielāku kontroli pār renderēšanas procesu, Java 3D ir paredzēts pietiekami vienkāršs, lai jebkurš pieredzējis Java programmētājs mācīties.

  • Ja jums nav nepieciešama zema līmeņa piekļuve renderēšanas operācijām, Java 3D var būt opcija. Piekļuve tiek piešķirta tikai pieprasījumiem, izmantojot atribūti un spēju biti, pēc formas un funkcijas ir līdzīgs Java 2D renderēšanas padomiem. (Skatiet resursus saitēm uz manām iepriekšējām Java 2D sērijām, kurās bija diskusija un 2D renderēšanas padomu piemēri).

  • Ja iespējams, Java 3D ir optimizēts ātrumam. Izpildes laikā tiek izmantoti renderēšanas iespēju biti, lai sižeta diagrammu optimizētu pēc iespējas ātrāk. Šī pieeja padara Java 3D piemērotāku interaktīvās grafikas vidēs (spēles, simulācijas, zemas aiztures situācijas) nekā bezsaistes augstas kvalitātes grafikas lietojumprogrammām (piemēram, renderēšanas fermas).

  • Satura importēšanai Java 3D izpildlaikā ir pieejams liels un aizvien lielāks skaits 3D iekrāvēju. Sun ir padarījis Java 3D VRML97 failu ielādētāju un pārlūku brīvi pieejamu ar kodu. Meklējiet nākamā mēneša Mediju programmēšana kolonnā, lai sīkāk izpētītu Java 3D iekrāvējus.

  • Java 3D prasa vektoru matemātikas iespējas, kas nav pieejamas citur Java platformā. Šīs matemātikas operācijas pašlaik atrodas javax.vecmath paketi un nākotnē to var pārvietot uz galveno platformu.

  • Java 3D atbalsta vairākas eksotiskas ierīces (piemēram, nūjas, datu cimdus un austiņas). The com.sun.j3d.utils.trackers pakete, kas iekļauta Sun ieviešanā, nodrošina klases Fakespace, Logitech un Polhemus ierīcēm. Šīs ierīces tomēr netiek plaši izmantotas, tāpēc es tās sīkāk neapspriedīšu. Ja jūs vēlaties uzzināt vairāk par ierīču atbalstu, lūdzu, skatiet Sun Java 3D vietnes un Java 3D adresātu sarakstu arhīvu (abi ir pieejami no galvenajiem Sun Java 3D URL, kas iekļauti zemāk esošajos resursos).

Java 3D ir daudz plusi, bet kā ar mīnusiem? Tie ietver:

  • Java 3D ir standarta paplašinājuma API. Java platformas licenciātiem tiek dota iespēja ieviest API, ja viņiem tas patīk, taču viņiem tas nav jāievieš. Java 3D pozicionēšana kā standarta paplašinājums rada risku samazināt Java 3D koda pārnesamību dažādās platformās - lielākajai daļai pārdevēju ir jācenšas sekot līdzi izmaiņām un papildinājumiem tikai galvenajā platformā.

  • Java 3D ir nopietni pieejamības ierobežojumi. Tie ir Java 3D statusa kā paplašinājuma API rezultāts. Vienīgais lielākais pārdevējs, kas pašlaik nodrošina Java 3D ieviešanu, ir Sun, ar tā ieviešanu Solaris un Win32. Salīdzinot ar OpenGL, kas ir pieejams katram Unix, Windows un daudzu citu operētājsistēmu aromātam, Java 3D koda pārrobežu pārvietojamība izskatās apšaubāma.

  • Kopā ar programmatūras pieejamības problēmām rodas arī dokumentācijas deficīts. Sun pieliek lieliskas pūles, lai nodrošinātu izstrādātāju apmācību un atbalstu Java 3D, taču tas joprojām nav pietiekams, salīdzinot ar pārējiem nozares centieniem dokumentēt OpenGL un tā lietošanu. OpenGL konsorcija vietne ir daudz dziļāka un plašāka par visu, ko Sun līdz šim ir izdevies izveidot Java 3D. Tas nav mazsvarīgs punkts: 3D grafikas API relatīvā sarežģītība padara labu dokumentāciju par nepieciešamību.

  • Java 3D paslēpj renderēšanas cauruļvada detaļas no izstrādātāja. Tā kā Java 3D ir augsta līmeņa API, tas ar nolūku no izstrādātāja slēpj detaļas par renderēšanas cauruļvadu, kas padara to nederīgu ievērojamam skaitam problēmu, ja šāda informācija ir svarīga. (Mēs apspriedīsim OpenGL zemākā līmeņa modeli un piekļuvi renderēšanas cauruļvadam vēlāk šajā 3D sērijā.)

  • Java 3D komponentiem ir smagsvara svars. Tas ir, viņiem ir vietējais (ne Java) vienaudžs, kas faktiski veic renderēšanu. Tas var sarežģīt GUI izstrādi, ja izmantojat Java Swing un tās visas Java vai vieglās komponentes. Ir daži īpaši risinājumi, taču kopumā vieglie un smagie komponenti labi nesajaucas tajos pašos konteinera priekšmetos un logos. Plašāka informācija par vieglā un smagā svara komponentu problēmām ir pieejama resursos šī raksta beigās.

Java 3D instalēšana

Tagad, kad mēs saprotam Java 3D galvenās funkcijas un ierobežojumus, gatavosimies izmēģināt kodu.

Java 3D ir pieejams beta versijā Win32 un Solaris. Nobriedušāka no Sun Java Java ieviešanas ir uzbūvēta uz OpenGL. Alfa kvalitātes Direct3D ieviešana ir pieejama arī Win32. Visiem ir nepieciešama Java 1.2 ar jaunāko Java 3D beta versiju, kas atbilst Java 1.2 Beta 4. Sun ir apsolījis izlaist galīgo Java 3D ieviešanu neilgi pēc tam, kad tā izlaidusi Java 1.2, kas pašlaik ir plānots 1998. gada decembrī.

Nedaudz mulsinošs malā: Sun izlaida Java 3D 1.0 alfa ieviešanu, kas atbilda Java 3D 1.0 API, taču tā nekad neizlaida neko citu kā alfa 1.0 API. Pēc tam Sun modificēja API, izlaižot modificēto versiju kā Java 3D 1.1 API. Pēc šīs versijas tika izlaisti tā dēvētie 1.1 beta ieviešanas varianti, līdz šim divi. Sun solīja atbrīvot galīgo API un ieviešanu neilgi pēc Java 1.2 platformas galīgās izlaišanas. Cerams, ka API ir stabilizējusies un netiks atjaunota, taču pasaule joprojām gaida bonafide īstenošanas pēdējo izlaišanu.

Tā kā Java OpenGL saistījumus mēs aplūkosim nākamajā slejā, es arī šajās instalēšanas instrukcijās esmu nolēmis ietaupīt un izmantot Java 3D OpenGL versiju. Ja instalējat OpenGL versiju, ko izmantot kopā ar šiem Java 3D piemēriem, jums būs renderēšanas bibliotēkas, kas nepieciešamas, lai Java-OpenGL piemēri tiktu parādīti vēlāk.

Programmatūras komponenti, kas nepieciešami Java 3D lietošanai, ir:

  • Java 3D izpildlaiks, kas pieejams vietnē Sun (nepieciešama bezmaksas Java Developer Connection pieteikšanās). Noteikti savai platformai izvēlieties Java 3D OpenGL versiju (es izmantoju Win32). No šī brīža jaunākais Win32 Java 3D for OpenGL ir 1.1 Beta 2, java3d11-beta2-win32-opengl.exe, un tā svars ir aptuveni 1,7 MB.

  • OpenGL 1.1, komplektā ar Windows NT 4.0 un Windows 95 OSR 2. Tomēr, ja jums ir Windows 95 OSR 1 izlaidums, varat lejupielādēt OpenGL atbalstu. Jaunākā Windows 95-OpenGL 1.1 ieviešana ir pieejama no Microsoft kā opengl95.exe un ir aptuveni 0,5 MB.

  • Java 1.2, pieejams Sun. (Ņemiet vērā, ka, to rakstot, Sun ir izlaidis jaunu Java 1.2 - 1. versijas kandidātu. Piemēri tiks atjaunināti jaunākajam laidienam pēc iespējas ātrāk.) Java 3D ir savienots ar 1.2 platformu, un Sun paziņoja java3d-interest adresātu saraksts, ka tas nav ieinteresēts atsaistīt API un mēģināt padarīt to pieejamu ar iepriekšējiem platformas laidieniem.

Ja vēlaties, varat arī lejupielādēt Java 3D dokumentāciju un koda paraugu. Abi ir pieejami no tās pašas saites kā Java 3D izpildlaiks.

Lūdzu, ņemiet vērā, ka jums vairs nav jāiestata CLASSPATH vides mainīgie, lai jūsu Java vai Appletviewer izpildāmie faili varētu atrast paplašinājumu bibliotēkas. Ar Java 1.2 Sun beidzot ir izveidojis standarta paplašinājumu direktoriju. Šis direktorijs atrodas jūsu JDK instalācijas direktorijā / jre / lib / ext /. Piemēram, manā sistēmā Java 1.2 Beta 4 ir instalēts:

C: \ jdk1.2beta4 \

un standarta paplašinājumu direktorijs atrodas:

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

Visām paplašinājumu bibliotēkām jāievieto savi burku arhīvi šajā paplašinājumu direktorijā instalēšanas laikā, un visi standarta JDK rīki zina, kā šeit meklēt vajadzīgos klases failus.

Sun Java 3D šajos arhīvos ir gan publiskas (dokumentētas Java 3D API specifikācijā), gan privātas (Sun īstenošanai specifiskas) klases. Publisko klašu arhīvi ietver:

  • j3dcore.jar - Satur klases failus publiskai Java 3D pakotnei javax.media.j3d.

  • vecmath.jar - Satur klases javax.vecmath.

Privātie arhīvi ietver:

  • j3daudio.jar - Arhivē com.sun.j3d.audio klases, kas veido atbalstu telpiskam audio virs Java pielāgotās kopijas Java Sound, uz Headspace balstītu audio motoru, debitējot Java 1.2.

  • j3dutils.jar - Iekļauj dažādas Sun lietderības klases 16 paketēs un apakšpakās zem tā com.sun.j3d. Es iedziļināšos šajās paketēs nākamajā mēnesī, turpinot mūsu Java 3D diskusiju.

  • j3dutilscontrib.jar - Arhivē noderīgus utilītus, ko citi ir ieguldījuši Sun centienos. Zem paketes ir septiņi iepakojumi com.sun.j3d hierarhija, ieskaitot com.sun.j3d.utils.trackers kods, kas minēts iepriekš. Arī nākamā mēneša slejā tiks sniegta plašāka informācija par iepakojumiem šajā burkā.

Lūdzu, ņemiet vērā, ka teorētiski jūs varat precizēt un izsaukt metodes jebkurā no klasēm, kas paredzētas nestandarta paketēs, piemēram com.saule, bet brīdinājums tukšums: Nav garantijas, ka tie būs pieejami platformā, kurā kods tiek izpildīts. Pašreizējā praksē Java 3D ir pieejams tikai no Sun, tāpēc daudzi izstrādātāji faktiski izmanto klases Sun privātajos arhīvos. Jums jāapzinās iespējamā pārnesamības kompromiss, kas saistīts ar izvēli to darīt.

Nav arī burvju, kā publiskās un privātās Java 3D klases mijiedarbojas ar sistēmas resursiem. Vietne Sun instalē vietējās bibliotēkas J3D.dll un j3daudio.dll saskaņā / jre / bin / direktorijā. Java 3D klases izmanto vietējās metodes, lai izsauktu šos DLL un saskarni ar Win32 platformu un OpenGL renderēšanas bibliotēku. (Līdzīgas bibliotēkas pastāv arī Solaris ieviešanai.)

Pēdējā piezīme par instalēšanu: OpenGL renderēšanas cauruļvads ir paredzēts, lai izmantotu OpenGL paātrinājuma aparatūru, lai paātrinātu grafikas lietojumprogrammas. Šīs slejas nolūkos jums vajadzētu būt iespējai eksperimentēt ar piemēriem bez īpašas aparatūras. (Patiesībā es izstrādāju visus piemērus Pentium 150 MHz MMX klēpjdatorā bez OpenGL paātrinājuma aparatūras.) Ja jūs interesē paātrinājuma kartes, jums vajadzētu atsaukties uz OpenGL vietni vai Java 3D adresātu sarakstu ( Plašāku informāciju skatiet sadaļā Resursi. Es plānoju iekļaut nedaudz vairāk informācijas arī nākamā mēneša Java 3D slejā par paātrinājuma aparatūru.

Ainas skata zara konstruēšana

Kā jau iepriekš minēju, viena no lielākajām ainas grafiks grafikas modelis ir tāds, ka tas ļauj nepieredzējušiem grafikas programmētājiem pievienot 3D savām lietojumprogrammām. Tradicionāli 3D programmētājiem bija jānorāda, kur un kā jāvelk atsevišķas līnijas vai citi grafikas primitīvi. Izmantojot ainas diagrammu, programmētājs vienkārši izveido kokam līdzīgu struktūru, kurā ir mezgli, kas attēlo renderējamos objektus, kā arī renderēšanas instrukcijas (piemēram, kur atrodas monitoram parādītais skata punkts, programmētāja 3D pasaules fiziskā ģeometrija relatīvais attālums starp lietām).

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