Programmēšana

Sveiks, JOGL

Jau dažus gadus programmētājam, kurš vēlējās izveidot grafiski intensīvu programmu, kuru varētu pārdot dažādu operētājsistēmu lietotājiem, bija viena izvēle - OpenGL. GL apzīmē grafikas bibliotēku. OpenGL ir SGI reģistrēta preču zīme. OpenGL izpaužas kā starpplatformu C programmēšanas API. Tomēr patiesībā tā ir no aparatūras neatkarīga programmēšanas saskarnes specifikācija.

OpenGL ir paredzēts grafikas veidošanai. Tas ir ātri. Lielāko daļu laika tas tiek paātrināts ar aparatūru. Šķiet, ka OpenGL var vizuāli darīt visu, ko jūs vēlētos.

Diemžēl OpenGL ir rakstīts C. Atzīsim, ka C nav vispopulārākā valoda sarežģītu lietojumprogrammu programmēšanai. Viens no lielākajiem OpenGL trūkumiem ir tas, ka jūs nevarat padarīt to bez loga, lai ievietotu grafiku, taču OpenGL nenodrošina līdzekļus, lai jūs varētu izveidot logus. Tas padara OpenGL iesācējiem grūti apgūstamu.

Par laimi tika ieviests GLUT (OpenGL Utility Toolkit), kas atviegloja lietotāju radīto logu, pogu un notikumu apstrādi. Tomēr OpenGL mācīšanās C vai pat C ++ var būt sāpīga jaunajiem programmētājiem vai programmētājiem, kuri vēlas izmantot patiesu objektorientētu programmēšanu.

Tad nāca JOGL

Java, iespējams, ir vispopulārākā patiesā objektorientētā programmēšanas valoda. Ir bijuši daudzi mēģinājumi apprecēt OpenGL ar Java, taču pirmais, kas visiem lika piecelties un pievērst uzmanību, bija Java Bindings for OpenGL vai JOGL. Iemesls tam ir tāds, ka šos centienus atbalsta Sun Microsystems (Java radītāji) un SGI (OpenGL veidotāji).

Mūsdienās JOGL izstrādā Sun tehnoloģiju spēļu grupa. Tas aizsākās dzīvē, kad Džungļi tika izstrādāti Kena Rasela un Krisa Klaina. Rasels ir Sun darbinieks, kurš strādā ar virtuālo HotSpot mašīnu ar daudzu gadu 3D pieredzi. Kline strādā Irrational Games, kā arī ir ļoti pieredzējis 3D grafiku.

Esmu personīgi pateicīgs par viņu un visu to cilvēku centieniem, kuri strādā pie JOGL. Ir bijuši vairāki mēģinājumi nodrošināt piekļuvi OpenGL, izmantojot draudzīgu Java API - starp tiem ir Java 3D, OpenGL Java Technology (gl4java) un Lightweight Java Game Library (LWJGL). JOGL ir pirmais, ar kuru es jutos ērti.

JOGL ir Sun atbalstīts Java klašu saistījumu komplekts OpenGL. Oho! Tas bija kumoss.

3D modeļu parādīšanai tiek izmantots OpenGL. Tas ir spēcīgs, ātrs un, iespējams, pats lielākais, kas notiek ar Java kopš Swing ieviešanas. Izmantojot OpenGL caur JOGL, jūs varēsiet izveidot foršas spēles vai modelēt situācijas, kuru izveidošana varētu būt pārāk dārga. Ir uzrakstīti biezi raksti, aprakstot OpenGL. Tie būs noderīgi, tiklīdz jūs zināt savu ceļu, bet vēl ne. Jums jāapgūst, kā tas viss attiecas uz Java API, kas jums pakļauj OpenGL. Jums ir nepieciešami arī daži pamata ievadi net.java.games.jogl. * un, iespējams, daži atsvaidzinātāji matemātikā.

Vai jums ir JOGL?

Ja vēlaties izmantot JOGL, jums tas būs jāiegūst jogl.jar un tam pievienoto vietējo kodu. Es sapņoju par dienu, kad tā ir standarta instalācija Java, taču pagaidām tas ir tikai labi sapnis.

Pirmais triks ir bināro failu atrašana jūsu OS un to izvilkšana. Es tos atradu vietnē //games-binaries.dev.java.net/build/index.html. Katra OS ir atšķirīga, taču instalēšanai ir divas daļas. The jogl.jar jāievieto sistēmas klases ceļā, un binārā bibliotēka jānovieto visur, kur bibliotēkas dodas jūsu OS. Ja paveicas, jums būs instalētājs, kas to izdarīs jūsu vietā. Ja jums nav instalētāja un nezināt, kur meklēt informāciju par visa ievietošanu datorā, varat sākt ar saitēm, kuras esmu norādījis vietnē Resursi. Mūsu pirmais koda piemērs tiks rakstīts īpaši, lai pārbaudītu, vai esat visu pareizi instalējis, tāpēc līdz tam nav jāuztraucas par instalācijas pārbaudi.

Javadocs par JOGL

Javadocs var iegūt tajā pašā vietā, kur ir JOGL binārais sadalījums. Javadocs tiks nosaukts par kaut ko līdzīgu jogl-1.0-usrdoc.tar.

Ja pārlūkojat net.java.games.jogl paketi, jūs ātri pamanīsit, ka dažas klases ir milzīgas. GL ir lielisks piemērs tam. Tevi tas neatbaida. Jūs ātri uzzināsiet, ka jūs varat veikt diezgan sarežģītu darbu pat ar nelielu JOGL zināšanu daudzumu. Nodarbības, kuras tagad varētu vēlēties apskatīt, ir:

  • GLzīmējams
  • GLCanvas
  • GLJPanel
  • GLC spējas
  • GLDrawableFactory

Tas būs jūsu pamata interfeiss grafikas pasaulē. Ja atceraties, iepriekš es minēju, ka viens no lielākajiem trūkumiem iesācējiem, kuri mācās OpenGL, ir vēja sistēmas standarta trūkums. GLUT šajā ziņā palīdz tālu mūsu C kolēģiem, taču mums ir Swing un AWT (Abstract Window Toolkit). Ļoti iespējams, ka jūs jau esat izmantojis AWT vai Swing, tāpēc jūs nejūtaties, ka visu mācāties no nulles. Tā ir laba lieta. Pēc ļoti īsa ievada par JOGL komponenta iegūšanu ekrānā mums nebūs vajadzīgs daudz darba, lai jūs darbotos diezgan foršās un gūžas lietotnēs!

GlueGen ... gandrīz tikpat foršs kā JOGL?

Kā jums vajadzētu zināt, OpenGL ir rakstīts C programmētājiem. Tas nozīmē, ka, lai Java varētu izmantot tās priekšrocības, ir jābūt kādai vietējai saskarnei. Tas nozīmē, ka, lai izveidotu šo savienojumu, ir jāuzraksta JNI (Java vietējā saskarne), kas nav jautrs vai jauks. OpenGL ir diezgan liels. Visu šo savienojumu rakstīšana prasa laiku. Lai kaut ko padarītu tikai nedaudz grūtāku, ir daudz īpašo ražotāju funkciju, un OpenGL turpina uzlaboties, kas nozīmē, ka ir jānotiek izmaiņām. Īsāk sakot, "ikvienam", kas mēģina sekot līdzi OpenGL, ir bijis diezgan grūti rakstīt Java vietējā saskarnē, kas visu aptver.

Ievadiet JOGL ļaudis. Viņi nolēma izmantot C galvenes failu priekšrocības un uzrakstīt kodu, kas viņiem padarītu visu JNI darbu. Viņi to sauca par GlueGen. GlueGen parsē C galvenes failus un pēc tam maģiski izveido nepieciešamo Java un JNI kodu, kas nepieciešams, lai izveidotu savienojumu ar šīm vietējām bibliotēkām. Tas nozīmē, ka OpenGL atjauninājumus var ātri pievienot JOGL.

Sveika pasaule!

Es stingri ticu tradīcijām, tāpēc, protams, mēs sāksim ar “Sveika pasaule”. Šī sveika pasaule pārbaudīs mūsu instalāciju un pateiks, vai viss vai tā daļa ir instalēta pareizi. Atcerieties, ka JOGL instalācijai ir divas daļas. Jar failā ir Java bibliotēka, bet citā bibliotēkā - vietējais kods.

Šeit ir mūsu programma:

importa net.java.games.jogl. *;

public class HelloWorld {public static void main (String args []) {mēģiniet {System.loadLibrary ("jogl"); System.out.println ("Sveika pasaule! (Vietējās bibliotēkas ir instalētas.)"); GLCapability caps = new GLCapability (); System.out.println ("Sveiki JOGL! (Šķiet, ka burka ir pieejama.)"); } catch (izņēmums e) {System.out.println (e); }}}

Pirmkārt, šī programma pārbauda, ​​vai vietējās un Java bibliotēkas ir pareizi instalētas. JOGL ir pareizi instalēts tikai tad, ja jogl.jar un dzimtā bibliotēka, nosaukta kaut kā līdzīga libjogl.jnilib vai jogl.dll, abi ir instalēti. Ja dzimtā bibliotēka nav pieejama, šī programma iemetīs java.lang.UnsatisfiedLinkError izņēmums. Ja JAR nav instalēts klases ceļā, programma pat neapkopo. Javac kompilators pateiks kaut ko līdzīgu pakotnei net.java.games.jogl nepastāv. "Kad šī klase apkopo un darbojas bez izņēmumiem, jūs esat gatavs turpināt mācīties JOGL.

Laba veidne

Pārejam uz pāris klasēm, kuras, iespējams, varēsiet izmantot kā veidni, ja jūk kopā ar JOGL. Es tos esmu izmantojis kā veidnes vairāk nekā vienu reizi. Jūtieties brīvi tos izmantot, kā vēlaties.

Šo veidni veido divas klases. Pirmais ir SimpleJoglApp parādīts zemāk, un otrais ir SimpleGLEventListener parādīts pēc īsa apraksta. Lai sastādītu veidni, jums būs jāievada abi. Galvenā lietotne:

importēt java.awt. *; importēt java.awt.event. *; importēt javax.swing. *; importa net.java.games.jogl. *;

/ ** * Šī ir pamata JOGL lietotne. Droši * atkārtoti izmantojiet šo kodu vai modificējiet to. * / public class SimpleJoglApp paplašina JFrame {public static void main (String [] args) {final SimpleJoglApp app = new SimpleJoglApp ();

// parādīt, ko esam izdarījuši SwingUtilities.invokeLater (new Runnable () {public void run () {app.setVisible (true);}}); }

public SimpleJoglApp () {// iestatiet JFrame nosaukumu super ("Simple JOGL Application");

// nogalināt procesu, kad JFrame ir aizvērts setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);

// tikai trīs JOGL koda rindiņas ... un šeit tās ir GLCapability glcaps = new GLCapability (); GLCanvas glcanvas = GLDrawableFactory.getFactory (). CreateGLCanvas (glcaps); glcanvas.addGLEventListener (jauns SimpleGLEventListener ());

// pievienojiet GLCanvas tāpat kā jebkuru komponentu getContentPane (). add (glcanvas, BorderLayout.CENTER); setSize (500, 300);

// centrējiet JFrame uz ekrāna centerWindow (this); }

public void centerWindow (komponenta rāmis) {Dimension screenSize = Toolkit.getDefaultToolkit (). getScreenSize (); Dimension frameSize = frame.getSize ();

if (frameSize.width> screenSize.width) frameSize.width = screenSize.width; if (frameSize.height> screenSize.height) frameSize.height = screenSize.height;

frame.setLocation ((screenSize.width - frameSize.width) >> 1, (screenSize.height - frameSize.height) >> 1); }}

Tas ir viss. Pievērsīsim uzmanību JOGL specifiskā koda trim rindām šajā pirmajā klasē. Sākt:

GLCapability glcaps = new GLCapability ();

Tas nosaka, kādas OpenGL / grafikas funkcijas ir pieejamas mūsu JOGL bibliotēkām un JVM.

Nākamais:

GLCanvas glcanvas = GLDrawableFactory.getFactory (). CreateGLCanvas (glcaps);

Mēs nevaram radīt GLCanvases vai GLJPanels. Mums tos vajag izveidot mums GLDrawableFactory. Tātad, mēs iegūstam a GLDrawableFactory izmantojot GLDrawableFactorystatiskā metode, getFactory ().

Tagad mums ir GLDrawableFactory, tāpēc mēs to izmantojam createGLCanvas () metode, lai izveidotu GLCanvas uz ko balstīties. Mēs būtu varējuši izmantot createGLJPanel () metodi, ja mēs būtu vēlējušies Swing komponentu, nevis AWT komponentu.

Ievērojiet, ka mēs izturējām GLC spējas objekts, kuru mēs izveidojām agrāk. Tas ļauj GLzīmējams mēs esam izveidojuši, lai tiktu izveidoti pareizi.

Visbeidzot, mēs esam gatavi pievienot a GLEventListener uz GLCanvas:

glcanvas.addGLEventListener (jauns SimpleGLEventListener ());

Mūsu ieviešana GLEventListener ir SimpleGLEventListener. Tā parūpēsies par jebkuru zīmējumu, kas jāveic, kad saņem zvanu no GLzīmējams un mūsu vienīgais GLCanvas. Kā redzēsiet, es nolēmu šajā programmā neko nezīmēt. Tagad par GLEventListener:

importēt java.awt. *; importēt java.awt.event. *; importa net.java.games.jogl. *;

/ ** * Mūsu vajadzībām ir svarīgi tikai divi no * GLEventListeners. Tie būtu * init () un display (). * / publiskā klase SimpleGLEventListener ievieš GLEventListener {

/ ** * Parūpējieties par inicializēšanu šeit. * / public void init (GLDrawable drawable) {

}

/ ** * Parūpējieties par zīmēšanu šeit. * / public void display (GLDrawable drawable) {

}

/ ** * Zvanīts, kad GLDrawable (GLCanvas * vai GLJPanel) izmērs ir mainījies. Mums tas * nebūs vajadzīgs, bet jums tas galu galā var būt vajadzīgs - tikai vēl nav. * / public void reshape (GLDrawable drawable, int x, int y, int platums, int augstums) {}

/ ** * Ja displeja dziļums tiek mainīts, kamēr programma * darbojas, tiek izsaukta šī metode. * Mūsdienās tas nenotiek daudz, ja vien * programmētājs to nedara savai programmai. * / public void displayChanged (GLDrawable drawable, Boolean modeChanged, Boolean deviceChanged) {}}

Tā ir JOGL darba sirds, kuru mēs darīsim. Ievērojiet zemāk redzamo UML grafiku. SimpleJoglApp ir JFrame. Tas satur mūsu GLzīmējams, kas faktiski ir a GLCanvas, bet nesaki viņam to. Mēs pievienojam SimpleGLEventListener, kas īsteno GLEventListener uz GLCanvas tātad GLCanvas zina, ka mums ir vienalga, vai viņš vēlas kādu OpenGL darbu. GLDrawables var sarunāt ausu, tāpēc jūs vēlaties pārliecināties, vai GLEventListener ir optimizēts ... pa īstam.

Šī lietotne var izskatīties mazliet kodēta atkarībā no jūsu operētājsistēmas. Tas ir sagaidāms, jo šajā brīdī jūs vienkārši parādāt nejaušus atmiņas bitus. Tāpēc apsveicu ar jaunatklātajiem grafikas talantiem.

Jūs esat gatavs reālajai lietai

Kad esat iepazinies ar iepriekšējo piemēru, izveidojiet skaistu attēlu.

Šeit ir jūsu nākamā lietotne. Pārliecinieties, ka ierakstījāt šo un visus piemērus. Atkļūdošana un sajaukšana ar tām palīdzēs ātri iemācīt, kā viņi strādā.

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