Programiranje 3D grafike u Javi, 3. dio: OpenGL

Prošlo je neko vrijeme od naše posljednje rate u ovoj seriji o programiranju 3D grafike na Javi (više o tome na kraju ovog stupca). Evo kratkog osvježavanja o onome o čemu smo zadnji put razgovarali i gdje smo stali.

U prethodna dva stupca (vidi Resursi) istražili smo Java 3D. Raspravljali smo o statičkim sadržajima i malim scenama, a zatim smo koristili veće grafikone scena i ugradili interaktivnost u neke osnovne 3D svjetove.

Sada kada znate malo o korištenju Java 3D-a, vrijeme je da usporedite i uporedite Java 3D pristup 3D grafici s vodećim kandidatom za grafički API: OpenGL.

Imajte na umu da je ovaj članak prvotno trebao biti intenzivan kodom, ali kasna odluka tvrtke Arcane Technologies u vezi s vezivanjem čarobnjaka (vidi dolje) zahtijevala je uklanjanje primjera koda. Nadam se da se sadržaj ovog članka može prilagoditi budućem vezivanju Java-OpenGL, ali još uvijek nedostupan iz Konzorcija OpenGL.

U svakom sam slučaju nastojao pružiti sve relevantne i korisne reference i URL-ove povezane s OpenGL-om u Resursima na kraju ovog stupca. Ako želite dalje kopati Java-OpenGL, toplo preporučujem da pregledate ove reference.

Java-OpenGL usporedba s Java 3D

U prethodnim obrocima Java 3D-a pružio sam popis snaga i slabosti korištenja Java 3D-a za grafičke aplikacije. Ponovimo taj popis, ali učinite to gledajući snage i slabosti rješenja temeljenih na Javi-OpenGL-u, umjesto rješenja zasnovanih na Javi 3D.

Prednosti korištenja OpenGL-a (i, prema produžetku i tamo gdje je navedeno, Java-OpenGL vezivanja):

  • OpenGL pruža proceduralni model grafike

    To se usko podudara s mnogim algoritmima i metodama koje su grafički programeri u prošlosti koristili. Proceduralni model istovremeno je intuitivan i jednostavan za mnoge postignute ljubitelje 3D grafike.

  • OpenGL omogućuje izravan pristup cjevovodu za prikazivanje

    To vrijedi za bilo koji od različitih jezičnih veza, uključujući većinu Java veza. OpenGL omogućuje programerima da izravno odrede način prikazivanja grafike. Ne samo da se nagovještava i traži kao kod Java 3D-a, nego se predviđa.

  • OpenGL je optimiziran na sve zamislive načine

    OpenGL je optimiziran za hardver i softver i ciljane platforme, od najjeftinijih računala i igraćih konzola do najmodernijih grafičkih superračunala.

  • Dobavljači svih vrsta hardvera koji se odnose na 3D grafiku podržavaju OpenGL

    OpenGL je

    the

    standard prema kojem dobavljači hardvera mjere svoju grafičku tehnologiju, nijedan. Kako se Microsoft pridružio SGI-u u inicijativi Fahrenheit, mnogima je postalo sve očiglednije da je to zapravo Microsoftovo neizravno priznanje da je OpenGL pobijedio u API ratovima za 2D i 3D grafiku.

S druge strane, ništa nije savršeno. OpenGL, a zasigurno Java-OpenGL povezivanja, imaju neke značajne nedostatke:

  • Snage proceduralnog pristupa grafičkom programiranju istovremeno su i slabost mnogih Java programera

    Za relativno nove programere, od kojih su mnogi možda primili svoje prve formalne upute za programiranje na Javi koristeći objektno orijentirane metodologije, OpenGL-ova proceduralna metoda ne slaže se dobro s objektno-orijentiranim pristupom i dobrom inženjerskom praksom.

  • OpenGL optimizacije mnogih dobavljača namijenjene su smanjenju izbora hardvera

    U najboljem je interesu svakog dobavljača izgraditi vlasnička proširenja i izvršiti vlasničke optimizacije za prodaju više vlastitog hardvera. Kao i kod svih hardverskih optimizacija, i vi morate koristiti OpenGL optimizaciju specifičnu za akcelerator s tim da svaka optimizacija za jednu platformu umanjuje prenosivost i performanse za nekoliko drugih. Općenitije optimizacije Java 3D-a uglavnom imaju za cilj povećati prenosivost Java 3D aplikacija.

  • Iako su C sučelja za OpenGL sveprisutna, Java sučelja još nisu standardizirana i nisu široko dostupna

    Magicarov proizvod Arcane Technologies donedavno je bio na tržištu kako bi promijenio ovo pitanje prenosivosti, ali s njegovom propašću ide barem dio međuplatformske priče za Java-OpenGL, barem trenutno. O tome više u nastavku.

  • Izlaganje OpenGL-a unutarnjim detaljima postupka prikazivanja može znatno zakomplicirati inače jednostavne 3D grafičke programe

    Snaga i fleksibilnost imaju cijenu složenosti. U brzim razvojnim ciklusima današnjeg tehnološkog svijeta, složenost je sama po sebi nešto što treba izbjegavati tamo gdje je to moguće. Stara je izreka o bugovima istinita: što više redaka koda, to je više bugova (općenito).

Kao što možete vidjeti iz prednosti i nedostataka pristupa zasnovanih na OpenGL-u, Java-OpenGL je jak u mnogim područjima u kojima je Java 3D slaba. OpenGL daje programerima pristup na nižoj razini procesu prikazivanja koji Java 3D izričito izbjegava, a OpenGL je trenutno dostupan na mnogo više platformi od Java 3D (čarobnjak na stranu). Ali ova fleksibilnost dolazi s potencijalnom cijenom: programeri imaju puno prostora za optimizaciju, što obrnuto znači da imaju puno prostora da zeznu stvari. Java 3D ima više ugrađene optimizacije i lakši model programiranja koji se može pokazati posebno korisnim za programere koji su novi u Javi, 3D grafičkim radovima ili umreženom i distribuiranom grafičkom programiranju.