Programování

Ahoj JOGL

Již několik let měl programátor, který chtěl vytvořit graficky náročný program, který by mohl být prodán uživatelům různých operačních systémů, jednu možnost - OpenGL. GL znamená grafickou knihovnu. OpenGL je registrovaná ochranná známka společnosti SGI. OpenGL se projevuje jako multiplatformní C programovací API. Ve skutečnosti se však jedná o hardwarově nezávislou specifikaci programovacího rozhraní.

OpenGL je pro tvorbu grafiky. Je to rychlé. Většinou je to hardwarově akcelerováno. Zdá se, že OpenGL dokáže vizuálně cokoli, co byste chtěli udělat.

OpenGL je bohužel napsán pro C. Přiznejme si to, C není nejoblíbenější jazyk pro programování složitých aplikací. Jednou z největších nevýhod OpenGL je, že bez okna nemůžete nic udělat, abyste do něj vložili grafiku, ale OpenGL vám neposkytuje prostředky k vytváření oken. Díky tomu se OpenGL pro začátečníky těžko učí.

Naštěstí byl zaveden GLUT (OpenGL Utility Toolkit), který usnadnil práci s okny, tlačítky a událostmi generovanými uživateli. Učení OpenGL v C nebo dokonce v C ++ může být bolestivé pro nové programátory nebo programátory, kteří chtějí používat skutečné objektově orientované programování.

Pak přišel JOGL

Java je pravděpodobně nejpopulárnějším skutečným objektově orientovaným programovacím jazykem. Bylo mnoho pokusů o sňatek OpenGL s Javou, ale první, díky kterému se každý postavil a všiml si, byla Java Bindings pro OpenGL nebo JOGL. Důvodem je to, že toto úsilí je podporováno společnostmi Sun Microsystems (tvůrci Java) a SGI (tvůrci OpenGL).

V současné době je JOGL vyvíjen skupinou herních technologií v Sun. Život začal jako Jungle vyvinutou Kenem Russelem a Chrisem Kline. Russell je zaměstnancem společnosti Sun, který pracuje na virtuálním stroji HotSpot s mnohaletými zkušenostmi ve 3D. Kline pracuje pro Irrational Games a má také velké zkušenosti s 3D grafikou.

Osobně jsem vděčný za jejich úsilí a úsilí všech, kteří na JOGL pracují. Bylo několik pokusů o poskytnutí přístupu k OpenGL prostřednictvím přátelského rozhraní Java API - mezi ně patří Java 3D, OpenGL pro technologii Java (gl4java) a Lightweight Java Game Library (LWJGL). JOGL je první, se kterým jsem se cítil pohodlně.

JOGL je Sun podporovaná sada vazeb tříd Java pro OpenGL. Wow! To byla sousta.

OpenGL se používá k zobrazení 3D modelů. Je výkonný, rychlý a možná největší věc, která se Javě od zavedení Swingu stala. Pomocí OpenGL prostřednictvím JOGL budete moci vytvářet skvělé hry nebo modelovat situace, jejichž vytvoření by mohlo být příliš nákladné. Byly napsány silné knihy popisující OpenGL. Budou užitečné, jakmile se zorientujete, ale zatím ne. Musíte se naučit, jak to všechno platí pro rozhraní Java API, která vám vystavují OpenGL. Potřebujete také několik základních úvodů do net.java.games.jogl. * a možná nějaké osvěžovače matematiky.

Máte JOGL?

Pokud chcete používat JOGL, budete si muset pořídit jogl.jar a jeho doprovodný nativní kód. Zdá se mi o dni, kdy je to s instalací Java standardní, ale zatím je to jen dobře umístěný sen.

Prvním trikem je nalezení binárních souborů pro váš operační systém a jejich extrakce. Našel jsem je na //games-binaries.dev.java.net/build/index.html. Každý operační systém je jiný, ale instalace má dvě části. The jogl.jar musí být umístěny do systémové cesty ke třídě a binární knihovna musí být umístěna všude tam, kde jsou knihovny ve vašem operačním systému. Pokud budete mít štěstí, budete mít instalační program, který to udělá za vás. Pokud nemáte instalační program a nevíte, kde hledat informace o umístění všeho do vašeho počítače, můžete začít s odkazy, které jsem uvedl ve zdrojích. Náš první příklad kódu bude napsán konkrétně, aby se otestovalo, zda jste nainstalovali vše správně, takže se nemusíte do té doby stresovat testováním instalace.

Javadocs pro JOGL

Javadocs lze získat na stejném místě jako binární distribuce JOGL. Javadocs bude mít něco podobného jogl-1.0-usrdoc.tar.

Pokud procházíte net.java.games.jogl balíček, rychle si všimnete, že některé třídy jsou obrovské. GL je toho dokonalým příkladem. Nenechte se tím odradit. Rychle zjistíte, že jste schopni dělat docela slušnou práci i při malém množství znalostí JOGL. Třídy, na které se teď možná budete chtít podívat, jsou:

  • GLDrawable
  • GLCanvas
  • GLJPanel
  • GLCapability
  • GLDrawableFactory

Bude to vaše základní rozhraní do světa grafiky. Pokud si pamatujete, dříve jsem zmínil, že jednou z největších nevýhod začátečníků učících se OpenGL je nedostatek standardu okenního systému. GLUT v tomto ohledu pomáhá našim kolegům z C, ale máme Swing a AWT (Abstract Window Toolkit). Je velmi pravděpodobné, že jste již použili AWT nebo Swing, takže nebudete mít pocit, že se učíte všechno od nuly. To je dobrá věc. Po velmi krátkém úvodu k získání komponenty pro JOGL na obrazovce nebudeme potřebovat mnoho práce, aby vám běžely docela cool a moderní aplikace!

GlueGen ... téměř tak cool jako JOGL?

Jak byste měli vědět, OpenGL je napsán pro programátory C. To znamená, že aby to Java mohla využívat, musí existovat nějaké nativní rozhraní. To znamená, že pro vytvoření tohoto spojení musí být napsáno JNI (Java Native Interface), které není zábavné ani hezké. OpenGL je docela velký. Psaní všech těchto spojení vyžaduje čas. Aby to bylo trochu obtížnější, existuje spousta funkcí specifických pro dodavatele a OpenGL se neustále vylepšuje, což znamená, že existují změny, s nimiž je třeba držet krok. Stručně řečeno, pro kohokoli, kdo se snaží držet krok s OpenGL, bylo docela těžké napsat Java do nativního rozhraní, které vše zahrnuje.

Zadejte lidi JOGL. Rozhodli se využít hlavičkové soubory C a napsat nějaký kód, který by za ně udělal veškerou práci JNI. Říkali tomu GlueGen. GlueGen analyzuje soubory záhlaví C a poté magicky vytvoří potřebný kód Java a JNI nezbytný pro připojení k těmto nativním knihovnám. To znamená, že aktualizace OpenGL lze rychle přidat do JOGL.

Ahoj světe!

Pevně ​​věřím v tradici, takže samozřejmě začneme „Hello World“. Tento Hello World prozkoumá naši instalaci a řekne nám, zda je celá nebo její část nainstalována správně. Pamatujte, že instalace JOGL má dvě části. V souboru jar je knihovna Java a nativní kód v jiné knihovně.

Zde 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! (Nativní knihovny jsou nainstalovány.)"); GLCapabilities caps = new GLCapabilities (); System.out.println ("Dobrý den, JOGL! (Nádoba se zdá být k dispozici.)"); } catch (Výjimka e) {System.out.println (e); }}}

Nejprve tento program otestuje, zda jsou nativní a Java knihovny nainstalovány správně. JOGL je správně nainstalován pouze tehdy, když jogl.jar a nativní knihovna, pojmenovaná něco jako libjogl.jnilib nebo jogl.dll, jsou obě nainstalovány. Pokud nativní knihovna není přístupná, tento program vyvolá a java.lang.UnsatisfiedLinkError výjimka. Pokud soubor JAR není nainstalován v cestě ke třídě, program se ani nezkompiluje. Překladač javac řekne něco podobného jako „balíček net.java.games.jogl neexistuje. “Když se tato třída zkompiluje a spustí bez výjimek, jste připraveni pokračovat v učení JOGL.

Dobrá šablona

Pojďme se přesunout k několika třídám, které se vám mohou hodit jako šablony, když se pohráváte s JOGL. Použil jsem je jako šablony více než jednou. Nebojte se je použít, jak chcete.

Tato šablona se skládá ze dvou tříd. První je SimpleJoglApp níže a druhá je SimpleGLEventListener zobrazí se po krátkém popisu. Pro kompilaci šablony budete muset zadat oba. Hlavní aplikace:

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

/ ** * Toto je základní aplikace JOGL. Nebojte se * tento kód znovu použít nebo upravit. * / public class SimpleJoglApp extends JFrame {public static void main (String [] args) {final SimpleJoglApp app = new SimpleJoglApp ();

// ukázat, co jsme udělali SwingUtilities.invokeLater (nový Runnable () {public void run () {app.setVisible (true);}}); }

public SimpleJoglApp () {// nastavit nadpis JFrame super ("Jednoduchá aplikace JOGL");

// zabít proces, když je JFrame uzavřen setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);

// pouze tři řádky kódu JOGL ... a tady jsou GLCapabilities glcaps = new GLCapabilities (); GLCanvas glcanvas = GLDrawableFactory.getFactory (). CreateGLCanvas (glcaps); glcanvas.addGLEventListener (nový SimpleGLEventListener ());

// přidejte GLCanvas stejně jako jakoukoli komponentu getContentPane (). add (glcanvas, BorderLayout.CENTER); setSize (500, 300);

// vycentrování JFrame na obrazovce centerWindow (toto); }

public void centerWindow (rámeček komponenty) {Dimension screenSize = Toolkit.getDefaultToolkit (). getScreenSize (); Dimenze 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); }}

To je ono. Zaměřme se na tři řádky kódu specifického pro JOGL v této první třídě. Začít:

GLCapabilities glcaps = new GLCapabilities ();

To určuje, jaké funkce OpenGL / grafiky jsou k dispozici našim knihovnám JOGL a JVM.

Další:

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

Nemůžeme vytvořit GLCanvases nebo GLJPanels. Musíme je nechat vytvořit pro nás GLDrawableFactory. Takže získáme a GLDrawableFactory použitím GLDrawableFactorystatická metoda, getFactory ().

Nyní máme GLDrawableFactory, takže používáme jeho createGLCanvas () metoda k vytvoření GLCanvas čerpat. Mohli jsme použít createGLJPanel () místo toho bychom chtěli místo komponenty AWT komponentu Swing.

Všimněte si, že jsme prošli v GLCapability objekt, který jsme vytvořili dříve. To umožňuje GLDrawable vytváříme, abychom byli vytvořeni správně.

Nakonec jsme připraveni přidat a GLEventListener do GLCanvas:

glcanvas.addGLEventListener (nový SimpleGLEventListener ());

Naše implementace GLEventListener je SimpleGLEventListener. Postará se o jakýkoli výkres, který je třeba provést, když obdrží hovor od GLDrawable a náš jediný GLCanvas. Jak uvidíte, rozhodl jsem se, že v tomto programu nebudu nic kreslit. Nyní pro GLEventListener:

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

/ ** * Pro naše účely jsou důležité pouze dva z * GLEventListeners. To by * bylo init () a display (). * / veřejná třída SimpleGLEventListener implementuje GLEventListener {

/ ** * Zde se postarejte o inicializaci. * / public void init (GLDrawable drawable) {

}

/ ** * Postarejte se o kreslení zde. * / public void display (GLDrawable drawable) {

}

/ ** * Volá se, když se velikost GLDrawable (GLCanvas * nebo GLJPanel) změnila. To * nebudeme potřebovat, ale možná to nakonec * budete potřebovat - zatím ještě ne. * / public void reshape (GLDrawable drawable, int x, int y, int width, int height) {}

/ ** * Pokud se změní hloubka zobrazení za běhu programu *, volá se tato metoda. * V dnešní době se to nestává moc, ledaže * programátor má svůj program. * / public void displayChanged (GLDrawable drawable, boolean modeChanged, boolean deviceChanged) {}}

To je srdcem práce JOGL, kterou budeme dělat. Všimněte si grafiky UML níže. SimpleJoglApp je JFrame. Obsahuje naše GLDrawable, což je ve skutečnosti GLCanvas, ale neříkej mu to. Přidáme SimpleGLEventListener, který implementuje GLEventListener do GLCanvas takže GLCanvas ví, že nás zajímá, jestli chce nějakou práci OpenGL. GLDrawables může odtrhnout vaše ucho, takže budete chtít zajistit GLEventListener je optimalizován ... doopravdy.

Tato aplikace může vypadat trochu zakódovaná v závislosti na vašem OS. To lze očekávat, protože v tomto okamžiku právě zobrazujete náhodné bity paměti. Takže gratuluji k vašim nově nalezeným grafickým talentům.

Jste připraveni na skutečnou věc

Poté, co jste se seznámili s předchozím příkladem, udělejte pěkný obrázek.

Tady je vaše další aplikace. Ujistěte se, že zadáte tento a všechny příklady. Ladění a procházení s nimi vám pomůže rychle naučit, jak fungují.

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