Ohjelmointi

Hei JOGL

Jo muutaman vuoden ajan ohjelmoijalla, joka halusi luoda grafiikkaintensiivisen ohjelman, joka voidaan myydä eri käyttöjärjestelmien käyttäjille, oli yksi vaihtoehto - OpenGL. GL tarkoittaa graafista kirjastoa. OpenGL on SGI: n rekisteröity tavaramerkki. OpenGL ilmenee alustan C-ohjelmointirajapintana. Todellisuudessa se on kuitenkin laitteistosta riippumaton määritys ohjelmointirajapinnalle.

OpenGL on tarkoitettu grafiikan luomiseen. Se on nopea. Suurimman osan ajasta se on laitteistokiihdytetty. Näyttää siltä, ​​että OpenGL voi tehdä visuaalisesti mitä tahansa, mitä haluat tehdä.

Valitettavasti OpenGL on kirjoitettu C: lle. Tunnustetaan tosiasia, että C ei ole suosituin kieli monimutkaisten sovellusten ohjelmoinnissa. Yksi OpenGL: n suurimmista haitoista on, että et voi tehdä siitä mitään tekemättä ilman ikkunaa grafiikkasi sijoittamiseksi, mutta OpenGL ei tarjoa keinoa luoda Windows. Tämän vuoksi OpenGL on vaikea oppia aloittelijoille.

Onneksi GLUT (OpenGL Utility Toolkit) otettiin käyttöön ja helpotti käyttäjien luomien ikkunoiden, painikkeiden ja tapahtumien käsittelyä. Silti OpenGL: n oppiminen C: ssä tai jopa C ++: ssa voi olla tuskallista uusille ohjelmoijille tai ohjelmoijille, jotka haluavat käyttää aitoa olio-ohjelmointia.

Sitten tuli JOGL

Java on mahdollisesti suosituin todellinen olio-ohjelmointikieli. On ollut monia yrityksiä avioitua OpenGL: n kanssa Java: n kanssa, mutta ensimmäinen, joka sai kaikki seisomaan ja ottamaan huomioon, oli Java Bindings for OpenGL tai JOGL. Syynä tähän on, että Sun Microsystems (Java-luojat) ja SGI (OpenGL-luojat) tukevat tätä työtä.

Nykyään JOGL: n on kehittänyt Sunin peliteknologiaryhmä. Se aloitti elämänsä, kun Ken Russelin ja Chris Klinen kehittämä viidakko. Russell on Sunin työntekijä, joka työskentelee virtuaalikoneessa HotSpot, jolla on monen vuoden 3D-kokemus. Kline työskentelee irrationaalisissa peleissä ja on myös erittäin kokenut 3D-grafiikan kanssa.

Olen henkilökohtaisesti kiitollinen heidän ponnisteluistaan ​​ja kaikkien niiden ihmisten ponnisteluista, jotka työskentelevät JOGL: n parissa. On ollut useita yrityksiä tarjota pääsy OpenGL: ään ystävällisen Java-sovellusliittymän kautta - näiden joukossa ovat olleet Java 3D, OpenGL for Java Technology (gl4java) ja Lightweight Java Game Library (LWJGL). JOGL on ensimmäinen, jonka kanssa tunsin oloni mukavaksi.

JOGL on Sunin tukema joukko Java-luokan sidoksia OpenGL: lle. Vau! Se oli suupala.

3D-mallien näyttämiseen käytetään OpenGL: ää. Se on tehokas, nopea ja ehkä suurin asia, mitä tapahtuu Javalle Swingin käyttöönoton jälkeen. Käyttämällä OpenGL: ää JOGL: n kautta pystyt tekemään hienoja pelejä tai mallintamaan tilanteita, joiden luominen voi olla liian kallista. Paksut kuviot on kirjoitettu kuvaamaan OpenGL: ää. Ne ovat hyödyllisiä, kun tiedät tiensä ympäri, mutta et vielä. Sinun on opittava, miten tämä kaikki koskee Java-sovellusliittymiä, jotka altistavat OpenGL: n sinulle. Tarvitset myös joitain perustietoja net.java.games.jogl. * ja ehkä matematiikan virkistäviä.

Onko sinulla JOGL?

Jos haluat käyttää JOGL: ää, sinun on hankittava jogl.jar ja sen mukana oleva alkuperäinen koodi. Haaveilen päivästä, että se on vakiona Java-asennuksessa, mutta toistaiseksi se on vain hyvin sijoitettu unelma.

Ensimmäinen temppu on löytää käyttöjärjestelmän binääritiedostot ja purkaa ne. Löysin ne osoitteesta //games-binaries.dev.java.net/build/index.html. Jokainen käyttöjärjestelmä on erilainen, mutta asennuksessa on kaksi osaa. jogl.jar on sijoitettava järjestelmän luokkatielle ja binäärikirjasto on sijoitettava kaikkialle, missä kirjastot menevät käyttöjärjestelmässäsi. Jos olet onnekas, sinulla on asentaja, joka tekee sen puolestasi. Jos sinulla ei ole asentajaa ja et tiedä mistä etsiä tietoja kaiken sijoittamisesta tietokoneellesi, voit aloittaa Resursseissa tarjoamistani linkeistä. Ensimmäinen koodiesimerkkimme kirjoitetaan nimenomaan testaamaan, oletko asentanut kaiken oikein, joten sinun ei tarvitse stressata asennuksen testaamiseen siihen asti.

Javadocs for JOGL

Javadocs voidaan hankkia samasta sijainnista kuin JOGL: n binäärijakauma. Javadocsille nimetään jotain vastaavaa jogl-1.0-usrdoc.tar.

Jos selaat net.java.games.jogl paketin, huomaat nopeasti, että jotkut luokat ovat valtavia. GL on täydellinen esimerkki tästä. Älä lykkää tätä. Huomaat nopeasti, että pystyt tekemään melko hienostunutta työtä jopa pienellä määrällä JOGL-tietämystä. Luokat, joita haluat ehkä vilkaista nyt, ovat:

  • GLDrawable
  • GLCanvas
  • GLJPanel
  • GLCominaisuudet
  • GLDrawableFactory

Nämä ovat perusliittymäsi grafiikan maailmaan. Jos muistat, aiemmin mainitsin, että yksi suurimmista haitoista aloittelijoille, jotka oppivat OpenGL: ää, on ikkunointijärjestelmän standardin puuttuminen. GLUT auttaa tässä suhteessa pitkään C-kollegojamme, mutta meillä on Swing ja AWT (Abstract Window Toolkit). On hyvin todennäköistä, että olet jo käyttänyt AWT: tä tai Swingia, joten et aio tuntea oppivasi kaiken tyhjästä. Tämä on hyvä asia. Hyvin lyhyen esittelyn jälkeen JOGL-komponentin saamisesta näytölle emme tarvitse paljon työtä, jotta sinulla olisi melko viileitä ja lonkka sovelluksia!

GlueGen ... melkein yhtä siisti kuin JOGL?

Kuten sinun pitäisi tietää, OpenGL on kirjoitettu C-ohjelmoijille. Tämä tarkoittaa, että Java voi hyödyntää sitä, sillä on oltava jokin natiivi käyttöliittymä. Tämä tarkoittaa, että tämän yhteyden luomiseksi on kirjoitettava JNI (Java Native Interface), joka ei ole hauskaa tai kaunista. OpenGL on melko iso. Kaikkien näiden yhteyksien kirjoittaminen vie aikaa. Asioiden vain hieman vaikeuttamiseksi on paljon toimittajakohtaisia ​​ominaisuuksia ja OpenGL paranee jatkuvasti, mikä tarkoittaa, että muutoksia on pysyttävä. Lyhyesti sanottuna "kenellekään", joka yrittää pysyä mukana OpenGL: ssä, on ollut melko vaikea kirjoittaa Java natiiville käyttöliittymälle, joka on kaikkea kattavaa.

Anna JOGL-ihmiset. He päättivät hyödyntää C-otsikkotiedostoja ja kirjoittaa koodin, joka tekisi kaiken JNI-työn heidän hyväkseen. He kutsuivat sitä GlueGeniksi. GlueGen jäsentää C-otsikkotiedostot ja luo sitten maagisesti tarvittavan Java- ja JNI-koodin, joka tarvitaan yhteyden muodostamiseen näihin natiivikirjastoihin. Tämä tarkoittaa, että OpenGL: n päivitykset voidaan lisätä nopeasti JOGL: ään.

Hei maailma!

Olen vakaasti uskovainen perinteeseen, joten tietysti aloitamme "Hello World". Tämä Hello World tutkii asennuksemme ja kertoo, onko kaikki tai osa asennettu oikein. Muista, että JOGL-asennuksessa on kaksi osaa. Jar-tiedostossa on Java-kirjasto ja toisessa kirjastossa natiivikoodi.

Tässä on ohjelmamme:

tuonti net.java.games.jogl. *;

public class HelloWorld {public static void main (String args []) {kokeile {System.loadLibrary ("jogl"); System.out.println ("Hei maailma! (Natiivikirjastot on asennettu.)"); GLCapability caps = uusi GLCapability (); System.out.println ("Hei JOGL! (Purkki näyttää olevan saatavilla.)"); } catch (Poikkeus e) {System.out.println (e); }}}

Ensinnäkin tämä ohjelma testaa, onko natiivi- ja Java-kirjastot asennettu oikein. JOGL on asennettu oikein vain, kun jogl.jar ja kotikirjasto, nimeltään jotain libjogl.jnilib tai jogl.dll, molemmat on asennettu. Jos alkuperäiskirjastoon ei ole pääsyä, tämä ohjelma heittää a java.lang.UnsatisfiedLinkError poikkeus. Jos JAR: ia ei ole asennettu luokan polulle, ohjelma ei edes käänny. Javac-kääntäjä sanoo jotain samanlaista kuin "package" net.java.games.jogl ei ole olemassa. "Kun tämä luokka kääntyy ja toimii ilman poikkeuksia, olet valmis jatkamaan JOGL-oppimista.

Hyvä malli

Siirrytään muutamaan luokkaan, jotka saattavat olla hyödyllisiä käyttää mallina JOGL: n kanssa sekaisin. Olen käyttänyt niitä malleina useammin kuin kerran. Voit vapaasti käyttää niitä haluamallasi tavalla.

Tämä malli koostuu kahdesta luokasta. Ensimmäinen on SimpleJoglApp näkyy alla, ja toinen on SimpleGLEventListener näkyy lyhyen kuvauksen jälkeen. Sinun on kirjoitettava molemmat mallin kääntämiseksi. Tärkein sovellus:

tuo java.awt. *; tuo java.awt.event. *; tuo javax.swing. *; tuoda net.java.games.jogl. *;

/ ** * Tämä on JOGL-perussovellus. Voit vapaasti * käyttää tätä koodia uudelleen tai muokata sitä. * / public class SimpleJoglApp laajentaa JFrame-kehystä {public static void main (String [] args) {final SimpleJoglApp app = new SimpleJoglApp ();

// näytä mitä olemme tehneet SwingUtilities.invokeLater (new Runnable () {public void run () {app.setVisible (true);}}); }

public SimpleJoglApp () {// aseta JFrame-otsikko super ("Simple JOGL -sovellus");

// tappaa prosessi, kun JFrame on suljettu setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);

// vain kolme JOGL-koodiriviä ... ja tässä ne ovat GLCapability glcaps = new GLCapability (); GLCanvas glcanvas = GLDrawableFactory.getFactory (). CreateGLCanvas (glcaps); glcanvas.addGLEventListener (uusi SimpleGLEventListener ());

// lisää GLCanvas aivan kuten mitä tahansa komponenttia getContentPane (). add (glcanvas, BorderLayout.CENTER); setSize (500, 300);

// keskitä JF-kehys ruudulle centerWindow (this); }

public void centerWindow (komponenttikehys) {Dimension screenSize = Toolkit.getDefaultToolkit (). getScreenSize (); Dimension frameSize = frame.getSize ();

jos (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); }}

Se on siinä. Keskitytään JOGL-spesifisen koodin kolmeen riviin tässä ensimmäisessä luokassa. Aloittaa:

GLCapability glcaps = uusi GLCapability ();

Tämä määrittää, mitkä OpenGL / grafiikkaominaisuudet ovat käytettävissä JOGL-kirjastoissamme ja JVM: ssä.

Seuraava:

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

Emme voi luoda GLCanvases tai GLJPanels. Meidän on saatava ne luomaan meille a GLDrawableFactory. Joten haemme a GLDrawableFactory käyttämällä GLDrawableFactorystaattinen menetelmä, getFactory ().

Nyt meillä on GLDrawableFactory, joten käytämme sitä createGLCanvas () menetelmä luoda a GLCanvas hyödyntää. Olisimme voineet käyttää createGLJPanel () menetelmä, jos olisimme halunneet Swing-komponentin AWT-komponentin sijaan.

Huomaa, että ohitimme GLCominaisuudet aiemmin luomamme esine. Tämä sallii GLDrawable olemme luoneet luotavan oikein.

Lopuksi olemme valmiita lisäämään a GLEventListener että GLCanvas:

glcanvas.addGLEventListener (uusi SimpleGLEventListener ());

Toteutamme GLEventListener On SimpleGLEventListener. Se huolehtii kaikista piirroksista, jotka on tehtävä, kun se saa puhelun GLDrawable ja ainoa GLCanvas. Kuten näette, päätin olla tekemättä mitään tästä ohjelmasta. Nyt GLEventListener:

tuo java.awt. *; tuo java.awt.event. *; tuoda net.java.games.jogl. *;

/ ** * Tarkoituksemme vuoksi vain kahdella * GLEventListener-soittimella on merkitystä. Ne olisivat * init () ja display (). * / public class SimpleGLEventListener toteuttaa GLEventListener {

/ ** * Huolehdi alustuksesta täällä. * / public void init (GLDrawable drawable) {

}

/ ** * Piirrä täällä. * / public void display (GLDrawable drawable) {

}

/ ** * Soitetaan, kun GLDrawable (GLCanvas * tai GLJPanel) on muuttunut kooltaan. Emme tarvitse tätä, mutta saatat lopulta tarvita sitä - vain ei vielä. * / public void reshape (GLDrawable drawable, int x, int y, int leveys, int korkeus) {}

/ ** * Jos näyttösyvyyttä muutetaan * -ohjelman ollessa käynnissä, tätä menetelmää kutsutaan. * Nykyään tätä ei tapahdu paljon, ellei * ohjelmoija saa ohjelmansa tekemään sen. * / public void displayChanged (GLDrawable drawable, boolean modeChanged, boolean deviceChanged) {}}

Se on JOGL-työn sydän, jonka teemme. Huomaa alla oleva UML-kuva. SimpleJoglApp on JFrame. Se sisältää meidän GLDrawable, joka on oikeastaan ​​a GLCanvas, mutta älä kerro hänelle sitä. Lisätään SimpleGLEventListener, joka toteuttaa GLEventListener että GLCanvas joten GLCanvas tietää, että välitämme, haluako hän OpenGL-työtä. GLDrawables voi puhua korvastasi, joten sinun kannattaa varmistaa, että GLEventListener on optimoitu… aidosti.

Tämä sovellus voi näyttää hieman sekoitetulta käyttöjärjestelmäsi mukaan. Tämä on odotettavissa, koska näytät vain satunnaisia ​​muistibittejä tässä vaiheessa. Joten onnittelut uusista grafiikkakykyistäsi.

Olet valmis oikeaan asiaan

Kun olet tutustunut edelliseen esimerkkiin, tee kaunis kuva.

Tässä on seuraava sovelluksesi. Varmista, että kirjoitat tämän ja kaikki esimerkit. Virheenkorjaus ja sekoittaminen heidän kanssaan opettaa sinulle nopeasti, miten ne toimivat.