Programovanie

Ahoj JOGL

Už niekoľko rokov mal programátor, ktorý chcel vytvoriť graficky náročný program, ktorý by sa mohol predávať používateľom rôznych operačných systémov, jednu voľbu - OpenGL. GL je skratka pre grafickú knižnicu. OpenGL je registrovaná ochranná známka spoločnosti SGI. OpenGL sa prejavuje ako programovacie API pre rôzne platformy C. V skutočnosti však ide o hardvérovo nezávislú špecifikáciu programovacieho rozhrania.

OpenGL slúži na tvorbu grafiky. Je to rýchle. Väčšinou je to hardvérovo akcelerované. Zdá sa, že OpenGL dokáže vizuálne všetko, čo by ste chceli.

OpenGL je bohužiaľ napísaný pre C. Priznajme si to, C nie je najpopulárnejším jazykom na programovanie zložitých aplikácií. Jednou z najväčších nevýhod OpenGL je, že bez okna nemôžete vložiť svoju grafiku do ničoho, ale OpenGL vám neposkytuje prostriedky na vytváranie okien. Vďaka tomu je OpenGL pre začiatočníkov ťažké naučiť sa.

Našťastie bol zavedený GLUT (OpenGL Utility Toolkit), ktorý uľahčil prácu s oknami, tlačidlami a udalosťami generovanými používateľmi. Napriek tomu môže byť učenie OpenGL v jazyku C alebo dokonca C ++ bolestivé pre nových programátorov alebo programátorov, ktorí chcú používať skutočné objektovo orientované programovanie.

Potom prišiel JOGL

Java je pravdepodobne najpopulárnejším skutočným objektovo orientovaným programovacím jazykom. Pokusov oženiť sa s OpenGL s Java bolo už veľa, ale prvý, ktorý každého prinútil vstať a všimnúť si, bol Java Bindings pre OpenGL alebo JOGL. Dôvodom je to, že toto úsilie je podporované spoločnosťami Sun Microsystems (tvorcovia Java) a SGI (tvorcovia OpenGL).

V súčasnosti JOGL vyvíja skupina herných technológií spoločnosti Sun. Začal to život ako Jungle, ktorý vyvinuli Ken Russel a Chris Kline. Russell je zamestnancom spoločnosti Sun pracujúcim na virtuálnom stroji HotSpot s dlhoročnými skúsenosťami v oblasti 3D. Kline pracuje pre Irrational Games a má tiež veľké skúsenosti s 3D grafikou.

Ja osobne som vďačný za ich úsilie a úsilie všetkých, ktorí pracujú na JOGL. Uskutočnilo sa niekoľko pokusov o poskytnutie prístupu k OpenGL prostredníctvom priateľského rozhrania Java API - medzi nimi boli Java 3D, OpenGL for Java Technology (gl4java) a Lightweight Java Game Library (LWJGL). JOGL je prvý, s ktorým som sa cítil pohodlne.

JOGL je Sun podporovaná sada väzieb triedy Java pre OpenGL. Wow! To bolo sústo.

OpenGL sa používa na zobrazovanie 3D modelov. Je výkonný, rýchly a možno najväčšia vec, ktorá sa stane s Java od uvedenia Swingu. Pomocou OpenGL prostredníctvom JOGL budete môcť vytvárať super hry alebo modelovať situácie, ktorých vytvorenie by mohlo byť príliš drahé. Boli napísane hrubé knihy popisujúce OpenGL. Budú užitočné, keď sa v tom zorientujete, ale zatiaľ nie. Musíte sa naučiť, ako to všetko platí pre Java API, ktoré vám vystavujú OpenGL. Potrebujete tiež niekoľko základných úvodov do net.java.games.jogl. * a možno nejaké osvieženie matematiky.

Máte JOGL?

Ak chcete používať JOGL, budete si musieť zaobstarať jogl.jar a jeho sprievodný natívny kód. Snívam o dni, ktorý je štandardom inštalácie Java, ale zatiaľ je to len dobre umiestnený sen.

Prvým trikom je nájdenie binárnych súborov pre váš operačný systém a ich extrakcia. Našiel som ich na //games-binaries.dev.java.net/build/index.html. Každý OS je iný, ale inštalácia sa skladá z dvoch častí. The jogl.jar musia byť umiestnené v systémovej triede cesta a binárna knižnica musí byť umiestnená všade, kde sa knižnice nachádzajú vo vašom operačnom systéme. Ak budete mať šťastie, budete mať inštalátor, ktorý to urobí za vás. Ak nemáte inštalačný program a neviete, kde hľadať informácie o umiestnení všetkého do počítača, môžete začať odkazmi, ktoré som uviedol v časti Zdroje. Náš prvý príklad kódu bude napísaný špeciálne preto, aby sme otestovali, či ste nainštalovali všetko správne, takže sa nemusíte dovtedy testovaním inštalácie stresovať.

Javadocs pre JOGL

Javadocs je možné získať na rovnakom mieste ako binárna distribúcia JOGL. Javadocs bude mať niečo podobné jogl-1.0-usrdoc.tar.

Ak prechádzate net.java.games.jogl balíka, rýchlo si všimnete, že niektoré triedy sú obrovské. GL je toho dokonalým príkladom. Nenechajte sa tým odradiť. Rýchlo zistíte, že ste schopní robiť pekne sofistikovanú prácu aj pri malom množstve znalostí JOGL. Triedy, na ktoré si teraz možno budete chcieť pozrieť, sú:

  • GLDrawable
  • GLCanvas
  • GLJPanel
  • GLCapability
  • GLDrawableFactory

Bude to vaše základné rozhranie do sveta grafiky. Ak si pamätáte, predtým som spomínal, že jednou z najväčších nevýhod začiatočníkov učiacich sa OpenGL je nedostatok štandardu okenného systému. GLUT v tomto ohľade pomáha našim kolegom z C, ale máme tu Swing a AWT (Abstract Window Toolkit). Je veľmi pravdepodobné, že ste už použili AWT alebo Swing, takže nebudete mať pocit, že sa všetko naučíte úplne od začiatku. To je dobrá vec. Po veľmi krátkom úvode k uvedeniu súčasti JOGL na obrazovku nebudeme potrebovať veľa práce, aby ste mohli spúšťať celkom zaujímavé a moderné aplikácie!

GlueGen ... skoro taký cool ako JOGL?

Ako by ste mali vedieť, OpenGL je určený pre programátorov jazyka C. To znamená, že aby to Java mohla využiť, musí existovať nejaké natívne rozhranie. To znamená, že JNI (Java Native Interface), ktoré nie je zábavné alebo pekné, musí byť na vytvorenie tohto spojenia napísané. OpenGL je dosť veľký. Napísanie všetkých týchto spojení si vyžaduje čas. Aby toho nebolo málo, je tu veľa funkcií špecifických pre dodávateľov a OpenGL sa neustále zdokonaľuje, čo znamená, že treba urobiť zmeny. Stručne povedané, pre každého, kto sa snaží držať krok s OpenGL, bolo dosť ťažké napísať program Java na natívne rozhranie, ktoré všetko zahŕňalo.

Zadajte ľudí z tímu JOGL. Rozhodli sa využiť hlavičkové súbory C a napísať nejaký kód, ktorý by za nich spravil všetku prácu JNI. Nazvali to GlueGen. GlueGen analyzuje hlavičkové súbory C a magickým spôsobom vytvorí potrebný kód Java a JNI potrebný na pripojenie k týmto natívnym knižniciam. To znamená, že aktualizácie OpenGL je možné rýchlo pridať do JOGL.

Ahoj Svet!

Pevne verím v tradíciu, takže samozrejme začneme „Hello World“. Tento Hello World preskúma našu inštaláciu a povie nám, či je celá alebo časť nainštalovaná správne. Pamätajte, že inštalácia JOGL má dve časti. K dispozícii je knižnica Java v súbore jar a natívny kód v inej knižnici.

Tu je náš program:

import net.java.games.jogl. *;

public class HelloWorld {public static void main (String args []) {try {System.loadLibrary ("jogl"); System.out.println ("Hello World! (Natívne knižnice sú nainštalované.)"); GLCapability caps = nové GLCapabilities (); System.out.println ("Dobrý deň, JOGL! (Nádoba sa javí ako dostupná.)"); } catch (Výnimka e) {System.out.println (e); }}}

Najskôr tento program otestuje, či sú natívna a Java knižnice nainštalované správne. JOGL je správne nainštalovaný, iba ak jogl.jar a natívna knižnica, pomenovaná niečo ako libjogl.jnilib alebo jogl.dll, sú obidve nainštalované. Ak natívna knižnica nie je prístupná, tento program vloží a java.lang.UnsatisfiedLinkError výnimkou. Ak v triede nie je nainštalovaný JAR, program sa ani nezkompiluje. Kompilátor javac povie niečo podobné ako „balíček“ net.java.games.jogl neexistuje. “Keď sa táto trieda kompiluje a beží bez výnimiek, ste pripravení ďalej sa učiť JOGL.

Dobrá šablóna

Prejdime k niekoľkým triedam, ktoré by sa vám mohli hodiť ako šablóna, keď sa budete motať okolo JOGL. Použil som ich ako šablóny viackrát. Nebojte sa ich použiť, ako sa vám páči.

Táto šablóna sa skladá z dvoch tried. Prvý je SimpleJoglApp zobrazený nižšie a druhý je SimpleGLEventListener sa zobrazí po krátkom popise. Ak chcete zostaviť šablónu, musíte napísať obe. Hlavná aplikácia:

import java.awt. *; import java.awt.event. *; importovať javax.swing. *; import net.java.games.jogl. *;

/ ** * Toto je základná aplikácia JOGL. Tento kód * môžete znova použiť alebo upraviť. * / public class SimpleJoglApp extends JFrame {public static void main (String [] args) {final SimpleJoglApp app = new SimpleJoglApp ();

// ukázať, čo sme urobili SwingUtilities.invokeLater (nový Runnable () {public void run () {app.setVisible (true);}}); }

public SimpleJoglApp () {// nastaviť nadpis JFrame super ("Jednoduchá aplikácia JOGL");

// zabiť proces, keď je JFrame zatvorený setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);

// iba tri riadky kódu JOGL ... a tu sú to GLCapabilities glcaps = new GLCapabilities (); GLCanvas glcanvas = GLDrawableFactory.getFactory (). CreateGLCanvas (glcaps); glcanvas.addGLEventListener (nový SimpleGLEventListener ());

// pridajte GLCanvas rovnako, ako by sme použili akýkoľvek komponent getContentPane (). add (glcanvas, BorderLayout.CENTER); setSize (500, 300);

// vycentrujte JFrame na obrazovku centerWindow (toto); }

public void centerWindow (komponentný rám) {Dimension screenSize = Toolkit.getDefaultToolkit (). getScreenSize (); Rozmer 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); }}

Toto je to. Zamerajme sa na tri riadky kódu špecifického pre JOGL v tejto prvej triede. Začať:

GLCapabilities glcaps = new GLCapabilities ();

Toto určuje, aké OpenGL / grafické funkcie sú dostupné pre naše knižnice JOGL a JVM.

Ďalšie:

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

Nemôžeme vytvárať GLCanvases alebo GLJPanels. Musíme ich nechať vytvoriť pre nás GLDrawableFactory. Takže načítame a GLDrawableFactory použitím GLDrawableFactorystatická metóda, getFactory ().

Teraz máme GLDrawableFactory, takže používame jeho createGLCanvas () metóda na vytvorenie a GLCanvas čerpať. Mohli sme použiť createGLJPanel () namiesto toho, keby sme chceli komponent Swing namiesto komponentu AWT.

Všimnite si, že sme prešli v GLCapability objekt, ktorý sme vytvorili skôr. To umožňuje GLDrawable tvoríme, aby sme boli stvorení správne.

Nakoniec sme pripravení pridať a GLEventListener do GLCanvas:

glcanvas.addGLEventListener (nový SimpleGLEventListener ());

Naša implementácia GLEventListener je SimpleGLEventListener. Postará sa o akékoľvek kreslenie, ktoré je potrebné urobiť, keď prijme hovor od GLDrawable a náš jediný GLCanvas. Ako uvidíte, rozhodol som sa, že v tomto programe nebudem nič kresliť. Teraz pre GLEventListener:

import java.awt. *; import java.awt.event. *; import net.java.games.jogl. *;

/ ** * Pre naše účely sú dôležité iba dva z * GLEventListeners. Boli by to init () a display (). * / verejná trieda SimpleGLEventListener implementuje GLEventListener {

/ ** * Tu sa postarajte o inicializáciu. * / public void init (kreslenie GLDrawable) {

}

/ ** * Tu sa postarajte o kreslenie. * / public void display (GLDrawable drawable) {

}

/ ** * Volá sa, keď sa zmenila veľkosť GLDrawable (GLCanvas * alebo GLJPanel). * Toto nebudeme potrebovať, ale možno to budete * nakoniec potrebovať - ​​len zatiaľ nie. * / public void reshape (GLDrawable drawable, int x, int y, int width, int height) {}

/ ** * Ak sa zmení hĺbka zobrazenia počas behu programu *, táto metóda sa volá. * V dnešnej dobe sa to nestáva veľa, pokiaľ * programátor nemá svoj program na to. * / public void displayChanged (kreslenie GLDrawable, boolean modeChanged, boolean deviceChanged) {}}

To je jadro práce JOGL, ktorú budeme robiť. Všimnite si grafiku UML nižšie. SimpleJoglApp je a JFrame. Obsahuje naše GLDrawable, čo je vlastne a GLCanvas, ale nehovor mu to. Pridáme SimpleGLEventListener, ktorý realizuje GLEventListener do GLCanvas takže GLCanvas vie, že nás zaujíma, či chce, aby bola vykonaná akákoľvek práca na OpenGL. GLDrawables môže odtrhnúť vaše ucho, takže sa budete chcieť ubezpečiť, že GLEventListener je optimalizovaný ... skutočne.

Táto aplikácia môže vyzerať trochu kódovane v závislosti od operačného systému, ktorý vlastníte. To sa dá očakávať, pretože v tomto okamihu práve zobrazujete náhodné bity pamäte. Takže gratulujeme k vašim novoobjaveným grafickým talentom.

Ste pripravení na to pravé

Keď ste sa oboznámili s predchádzajúcim príkladom, urobte si pekný obrázok.

Tu je vaša ďalšia aplikácia. Nezabudnite napísať tento a všetky príklady. Ladenie a prechádzanie sa s nimi vám pomôže rýchlo sa naučiť, ako fungujú.

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