Programiranje

Pozdravljeni JOGL

Že nekaj let ima programer, ki je želel ustvariti grafično intenziven program, ki bi ga lahko prodali uporabnikom različnih operacijskih sistemov, OpenGL. GL pomeni knjižnico grafik. OpenGL je registrirana blagovna znamka družbe SGI. OpenGL se kaže kot API za programiranje na več platformah C. V resnici pa gre za strojno neodvisno specifikacijo programskega vmesnika.

OpenGL je namenjen izdelavi grafike. Hitro je. Največkrat je to strojno pospešeno. Zdi se, da lahko OpenGL vizualno stori vse, kar bi vi želeli.

Na žalost je OpenGL napisan za C. Priznajmo si, C ni najbolj priljubljen jezik za programiranje zapletenih aplikacij. Ena največjih pomanjkljivosti OpenGL-a je ta, da brez okna ne morete storiti ničesar, v kar bi lahko vstavili svojo grafiko, vendar OpenGL ne ponuja sredstev za ustvarjanje oken. Zaradi tega se je OpenGL težko naučiti za začetnike.

Na srečo je bil predstavljen GLUT (OpenGL Utility Toolkit), ki je olajšal obravnavo oken, gumbov in dogodkov, ki jih ustvarijo uporabniki. Kljub temu je učenje OpenGL v jeziku C ali celo C ++ lahko boleče za nove programerje ali programerje, ki želijo uporabljati resnično objektno usmerjeno programiranje.

Potem je prišel JOGL

Java je verjetno najbolj priljubljen pravi objektno usmerjen programski jezik. Veliko je bilo poskusov poroke z OpenGL z Javo, toda prva, ki je vse vstala in opazila, je bila Java Bindings for OpenGL ali JOGL. Razlog za to je, da ta prizadevanja podpirata Sun Microsystems (ustvarjalci Jave) in SGI (ustvarjalci OpenGL).

Danes JOGL razvija skupina za tehnologijo iger pri Sun. Začelo se je življenje, ko sta Jungle razvila Ken Russel in Chris Kline. Russell je zaposleni v podjetju Sun, ki dela na virtualnem računalniku HotSpot z dolgoletnimi 3D izkušnjami. Kline dela za iracionalne igre in je zelo izkušen tudi s 3D grafiko.

Osebno sem hvaležen za njihov trud in trud vseh, ki delajo na JOGL-u. Bilo je več poskusov dostopa do OpenGL prek prijaznega Java API-ja - med njimi so Java 3D, OpenGL for Java Technology (gl4java) in Lahka knjižnica iger Java (LWJGL). JOGL je prvi, s katerim sem se dobro počutil.

JOGL je nabor povezav Java razreda za OpenGL, ki ga podpira Sun. Vau! To je bilo zalogaj.

OpenGL se uporablja za prikaz 3D modelov. Je zmogljiva, hitra in morda največja stvar, ki se je zgodila Javi, odkar je bil predstavljen Swing. Z uporabo OpenGL-a prek JOGL-a boste lahko naredili zanimive igre ali modelirali situacije, ki bi lahko nastale predrago. Napisani so debeli tomi, ki opisujejo OpenGL. Koristili bodo, ko se boste že znali, a še ne. Naučiti se morate, kako vse to velja za Java API-je, ki vam izpostavljajo OpenGL. Potrebujete tudi nekaj osnovnih predstavitev net.java.games.jogl. * in morda nekaj osvežilcev matematike.

Imate JOGL?

Če želite uporabljati JOGL, ga boste morali dobiti jogl.jar in pripadajočo domačo kodo. Sanjam o dnevu, ko je to standardno pri namestitvi Java, toda za zdaj so to le dobro postavljene sanje.

Prvi trik je iskanje binarnih datotek za vaš OS in njihovo ekstrahiranje. Našel sem jih na //games-binaries.dev.java.net/build/index.html. Vsak operacijski sistem je drugačen, vendar je treba namestiti dva dela. The jogl.jar mora biti postavljena v sistemsko pot do razreda, binarna knjižnica pa mora biti nameščena kamor koli knjižnice gredo v vašem OS. Če imate srečo, boste imeli namestitvenega programa, ki bo to naredil namesto vas. Če nimate namestitvenega programa in ne veste, kje iskati informacije o namestitvi vsega v svoj računalnik, lahko začnete s povezavami, ki sem jih navedel v virih. Naš prvi primer kode bo napisan posebej za preverjanje, ali ste vse pravilno namestili, tako da vam do takrat ni treba poudarjati preizkušanja namestitve.

Javadocs za JOGL

Javadocs je mogoče dobiti na istem mestu kot binarna distribucija JOGL. Javadocs bo poimenovan podobno jogl-1.0-usrdoc.tar.

Če brskate po net.java.games.jogl paket, boste hitro opazili, da je nekaj predavanj ogromno. GL je odličen primer tega. Naj vas to ne odvrne. Hitro boste ugotovili, da lahko opravite precej prefinjeno delo, tudi z majhno količino znanja JOGL. Predavanja, ki bi jih morda želeli pogledati zdaj, so:

  • GLDrawable
  • GLCanvas
  • GLJPanel
  • Zmožnosti GLC
  • GLDrawableFactory

To bo vaš osnovni vmesnik v svet grafike. Če se spomnite, prej sem omenil, da je ena največjih pomanjkljivosti za začetnike, ki se učijo OpenGL, pomanjkanje standarda okenskega sistema. GLUT pri tem zelo pomaga našim kolegom C, vendar imamo Swing in AWT (Abstract Window Toolkit). Zelo verjetno ste že uporabljali AWT ali Swing, zato se vam ne bo zdelo, da se vsega učite iz nič. To je dobro. Po zelo kratkem uvodu v postavitev komponente za JOGL na zaslon ne bomo potrebovali veliko dela, da boste zagnali precej kul in moderne aplikacije!

GlueGen ... skoraj tako kul kot JOGL?

Kot bi se morali zavedati, je OpenGL napisan za programerje C. To pomeni, da mora Java, da jo izkoristi, obstajati nekaj izvornega vmesnika. To pomeni, da je treba za to povezavo napisati JNI (Java Native Interface), ki ni zabaven ali lep. OpenGL je precej velik. Pisanje vseh teh povezav zahteva čas. Da bi stvari le malo otežili, obstaja veliko funkcij, ki so značilne za prodajalce, OpenGL pa se nenehno izboljšuje, kar pomeni, da je treba slediti spremembam. Skratka, "kdorkoli", ki je poskušal slediti OpenGL, je bilo težko napisati Javo v domači vmesnik, ki je vseobsegajoč.

Vnesite ljudi JOGL. Odločili so se, da izkoristijo datoteke glave C in napišejo nekaj kode, ki bi zanje opravila vsa dela JNI. Imenovali so ga GlueGen. GlueGen razčleni datoteke z glavo C in nato čarobno ustvari potrebno kodo Java in JNI, potrebno za povezavo s temi izvornimi knjižnicami. To pomeni, da je mogoče posodobitve za OpenGL hitro dodati v JOGL.

Pozdravljen, svet!

Trdno verjamem v tradicijo, zato bomo seveda začeli s "Hello World". Ta Hello World bo preučil našo namestitev in nam sporočil, ali so vsi deli ali vsi pravilno nameščeni. Ne pozabite, da sta namestitvi JOGL dva dela. V datoteki jar je knjižnica Java, v drugi knjižnici pa je izvorna koda.

Tu je naš program:

import net.java.games.jogl. *;

javni razred HelloWorld {public static void main (String args []) {try {System.loadLibrary ("jogl"); System.out.println ("Pozdravljeni, svet! (Domače knjižnice so nameščene.)"); Omejitve GLCapabilities = nove GLCapabilities (); System.out.println ("Pozdravljeni JOGL! (Kozarec je na voljo.)"); } ulov (izjema e) {System.out.println (e); }}}

Najprej ta program preizkusi, ali sta izvorni in Java knjižnici pravilno nameščeni. JOGL je pravilno nameščen le, ko je jogl.jar in domača knjižnica, imenovana nekako tako libjogl.jnilib ali jogl.dll, sta nameščena oba. Če izvorna knjižnica ni dostopna, bo ta program vrgel datoteko java.lang.UnsatisfiedLinkError izjema. Če JAR ni nameščen v razredu, program ne bo niti preveden. Prevajalnik javac bo rekel nekaj podobnega kot "paket net.java.games.jogl ne obstaja. "Ko se ta razred prevede in zažene brez izjem, ste pripravljeni nadaljevati učenje JOGL-a.

Dobra predloga

Pojdimo na nekaj razredov, ki se vam bodo morda zdeli uporabni kot predloga med zajebavanjem z JOGL. Kot predloge sem jih uporabil že večkrat. Uporabite jih lahko, kakor želite.

Ta predloga je sestavljena iz dveh razredov. Prvi je SimpleJoglApp prikazano spodaj, drugi pa je SimpleGLEventListener prikazano po kratkem opisu. Za sestavljanje predloge boste morali vnesti oboje. Glavna aplikacija:

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

/ ** * To je osnovna aplikacija JOGL. Vas prosimo, da * ponovno uporabite to kodo ali jo spremenite. * / javni razred SimpleJoglApp razširja JFrame {public static void main (String [] args) {final SimpleJoglApp app = new SimpleJoglApp ();

// pokažemo, kaj smo naredili SwingUtilities.invokeLater (new Runnable () {public void run () {app.setVisible (true);}}); }

public SimpleJoglApp () {// nastavi naslov JFrame super ("Simple JOGL Application");

// ubijemo postopek, ko je JFrame zaprt setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);

// samo tri vrstice kode JOGL ... in tukaj so GLCapabilities glcaps = new GLCapabilities (); GLCanvas glcanvas = GLDrawableFactory.getFactory (). CreateGLCanvas (glcaps); glcanvas.addGLEventListener (novo SimpleGLEventListener ());

// dodamo GLCanvas tako, kot bi dodali katero koli komponento getContentPane (). add (glcanvas, BorderLayout.CENTER); setSize (500, 300);

// JFrame centriramo na zaslonu centerWindow (to); }

public void centerWindow (okvir komponente) {Dimension screenSize = Toolkit.getDefaultToolkit (). getScreenSize (); Dimenzija 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 to. Osredotočimo se na tri vrstice kode, specifične za JOGL, v tem prvem razredu. Začeti:

GLCapabilities glcaps = nove GLCapabilities ();

To določa, katere funkcije OpenGL / grafike so na voljo našim knjižnicam JOGL in JVM.

Naslednji:

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

Ne moremo ustvarjati GLCanvases oz GLJPanels. Moramo jih ustvariti za nas GLDrawableFactory. Torej, pridobimo a GLDrawableFactory uporabo GLDrawableFactorystatična metoda, getFactory ().

Zdaj imamo GLDrawableFactory, zato uporabljamo njegovo createGLCanvas () metoda za ustvarjanje GLCanvas risati naprej. Lahko bi uporabili createGLJPanel () namesto tega, če bi želeli komponento Swing namesto komponente AWT.

Obvestilo, da smo šli v Zmožnosti GLC predmet, ki smo ga ustvarili prej. To omogoča GLDrawable smo ustvarili, da bomo pravilno ustvarjeni.

Končno smo pripravljeni dodati a GLEventListener do GLCanvas:

glcanvas.addGLEventListener (novo SimpleGLEventListener ());

Naše izvajanje GLEventListener je SimpleGLEventListener. Poskrbel bo za vsako risbo, ki jo je treba narediti, ko prejme klic iz GLDrawable in naša ena in edina GLCanvas. Kot boste videli, sem se odločil, da v tem programu ne bom risal ničesar. Zdaj pa GLEventListener:

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

/ ** * Za naše namene sta pomembna le dva od * GLEventListeners. Ti bi bili * init () in display (). * / javni razred SimpleGLEventListener implementira GLEventListener {

/ ** * Tu poskrbite za inicializacijo. * / javna void init (GLDrawable drawable) {

}

/ ** * Poskrbite za risanje tukaj. * / javni prikaz praznine (GLDrawable lahko vlečen) {

}

/ ** * Pokliče se, ko se GLDrawable (GLCanvas * ali GLJPanel) spremeni v velikosti. Tega * ne bomo potrebovali, vendar boste morda sčasoma * potrebovali - samo še ne. * / javno preoblikovanje praznine (GLDrawable risljivo, int x, int y, int širina, int višina) {}

/ ** * Če se med izvajanjem programa * spremeni globina prikaza, se ta metoda pokliče. * Dandanes se to ne dogaja veliko, razen če * to počne programator. * / public void displayChanged (GLDrawable vlečen, logični načinChanged, boolean deviceChanged) {}}

To je bistvo dela JOGL, ki ga bomo opravljali. Upoštevajte spodnjo grafiko UML. SimpleJoglApp je JFrame. Vsebuje našo GLDrawable, kar je pravzaprav a GLCanvas, vendar mu tega ne povej. Dodamo SimpleGLEventListener, ki izvaja GLEventListener do GLCanvas torej GLCanvas ve, da nam je vseeno, če želi, da se opravi kakršno koli OpenGL GLDrawables lahko ušesa odklonite, zato se boste prepričali, da je vaš GLEventListener je optimiziran ... zares.

Ta aplikacija je morda videti nekoliko premešana, odvisno od vašega OS. To je pričakovano, ker v tem trenutku samo prikazujete naključne koščke pomnilnika. Torej, čestitke za vaše nove grafične talente.

Pripravljeni ste na pravo stvar

Ko se seznanite s prejšnjim primerom, naredite lepo sliko.

Tu je vaša naslednja aplikacija. Prepričajte se, da ste vnesli to in vse primere. Odpravljanje napak in petja z njimi vas bo hitro naučilo, kako delujejo.

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