Programmering

Hei JOGL

I noen år nå hadde en programmerer som ønsket å lage et grafikkintensivt program som kunne selges til brukere av forskjellige operativsystemer, ett valg - OpenGL. GL står for grafikkbibliotek. OpenGL er et registrert varemerke for SGI. OpenGL manifesterer seg som en cross-platform C programmerings-API. I virkeligheten er det imidlertid en maskinvareuavhengig spesifikasjon for et programmeringsgrensesnitt.

OpenGL er for å lage grafikk. Det er raskt. Mesteparten av tiden er det maskinvareakselerert. Det ser ut til at OpenGL kan gjøre alt visuelt du ønsker å gjøre.

Dessverre er OpenGL skrevet for C. La oss innse det, C er ikke det mest populære språket for programmering av komplekse applikasjoner. En av de største ulempene med OpenGL er at du ikke kan få det til å gjøre noe uten et vindu for å sette grafikken din, men OpenGL gir ikke et middel for deg å lage vinduer. Dette gjør OpenGL vanskelig å lære for nybegynnere.

Heldigvis ble GLUT (OpenGL Utility Toolkit) introdusert og gjort det enklere å håndtere vinduer, knapper og hendelser generert av brukere. Likevel kan det å lære OpenGL i C eller til og med C ++ være smertefullt for nye programmerere eller programmerere som ønsker å bruke ekte objektorientert programmering.

Så kom JOGL

Java er muligens det mest populære ekte objektorienterte programmeringsspråket. Det har vært mange forsøk på å gifte seg med OpenGL med Java, men den første som fikk alle til å stå opp og legge merke til var Java Bindings for OpenGL, eller JOGL. Årsaken til dette er at denne innsatsen støttes av Sun Microsystems (skaperne av Java) og SGI (skaperne av OpenGL).

I dag er JOGL utviklet av spillteknologigruppen hos Sun. Det startet livet som Jungle utviklet av Ken Russel og Chris Kline. Russell er ansatt hos Sun og jobber på HotSpot Virtual Machine med mange års 3D-erfaring. Kline jobber for Irrational Games og er også veldig erfaren med 3D-grafikk.

Jeg er personlig takknemlig for innsatsen og innsatsen til alle de som jobber med JOGL. Det har vært flere forsøk på å gi tilgang til OpenGL gjennom et vennlig Java API - blant disse har Java 3D, OpenGL for Java Technology (gl4java) og Lightweight Java Game Library (LWJGL) vært. JOGL er den første jeg følte meg komfortabel med.

JOGL er det Sun-støttede settet med Java-klassebindinger for OpenGL. Wow! Det var en munnfull.

OpenGL brukes til å vise 3D-modeller. Det er kraftig, raskt og kanskje den største tingen som har skjedd med Java siden Swing ble introdusert. Ved å bruke OpenGL gjennom JOGL vil du kunne lage kule spill eller modellsituasjoner som kan være for dyre å lage. Det er skrevet tykke tomater som beskriver OpenGL. De vil være nyttige når du kjenner deg rundt, men ikke ennå. Du må lære hvordan alt dette gjelder Java API-ene som utsetter OpenGL for deg. Du trenger også noen grunnleggende introduksjoner til net.java.games.jogl. * og kanskje noen forfriskninger på matematikk.

Har du JOGL?

Hvis du vil bruke JOGL, må du få jogl.jar og den tilhørende innfødte koden. Jeg drømmer om dagen det er standard med Java-installasjonen, men foreløpig er det bare en godt plassert drøm.

Det første trikset er å finne binærfiler for operativsystemet ditt og trekke dem ut. Jeg fant dem på //games-binaries.dev.java.net/build/index.html. Hvert operativsystem er forskjellig, men det er to deler å installere. De jogl.jar må plasseres i systemklassen, og det binære biblioteket må plasseres hvor som helst biblioteker i operativsystemet ditt. Hvis du er heldig, vil du ha et installatør som kan gjøre det for deg. Hvis du ikke har et installasjonsprogram og ikke vet hvor du skal lete etter informasjon om hvordan du plasserer alt på datamaskinen din, kan du begynne med lenkene jeg har gitt i Resources. Vårt første kodeeksempel vil bli skrevet spesielt for å teste om du har installert alt riktig, slik at du ikke trenger å stresse med å teste installasjonen din til da.

Javadocs for JOGL

Javadocs kan fås på samme sted som den binære distribusjonen av JOGL. Javadocs vil bli kalt noe som ligner på jogl-1.0-usrdoc.tar.

Hvis du blar gjennom net.java.games.jogl pakke, vil du raskt merke at noen av klassene er enorme. GL er et perfekt eksempel på dette. Ikke la deg skremme av dette. Du vil raskt finne ut at du er i stand til å gjøre noe ganske sofistikert arbeid selv med bare en liten mengde JOGL-kunnskap. Klassene du kanskje vil se på nå er:

  • GLDrawable
  • GLCanvas
  • GLJPanel
  • GLKapasiteter
  • GLDrawableFactory

Dette vil være ditt grunnleggende grensesnitt i grafikkverdenen. Hvis du husker, nevnte jeg tidligere at en av de største ulempene for nybegynnere som lærer OpenGL, er mangelen på en standardvindu. GLUT hjelper langt i den forbindelse for våre C-kolleger, men vi har Swing og AWT (Abstract Window Toolkit). Det er veldig sannsynlig at du allerede har brukt AWT eller Swing, så du kommer ikke til å føle at du lærer alt fra bunnen av. Dette er bra. Etter en veldig kort introduksjon til å få en komponent for JOGL opp på skjermen, trenger vi ikke mye arbeid for at du skal kjøre ganske kule og hippe apper!

GlueGen ... nesten like kult som JOGL?

Som du burde være klar over, er OpenGL skrevet for C-programmerere. Dette betyr at for at Java skal kunne dra nytte av det, må det være noe eget grensesnitt. Dette betyr at JNI (Java Native Interface), som ikke er morsomt eller pent, må skrives for å få denne forbindelsen. OpenGL er ganske stort. Det tar tid å skrive alle disse tilkoblingene. For å gjøre ting bare litt vanskeligere, er det mange leverandørspesifikke funksjoner, og OpenGL forbedrer seg stadig, noe som betyr at det er endringer å følge med. Kort sagt, det har vært ganske vanskelig for "hvem som helst" som prøver å holde tritt med OpenGL å skrive et Java-til-grensesnitt som alt omfatter.

Skriv inn JOGL-folkene. De bestemte seg for å dra nytte av C-headerfilene og skrive litt kode som ville gjøre alt JNI-arbeidet for dem. De kalte det GlueGen. GlueGen analyserer C-headerfilene og oppretter deretter magisk den nødvendige Java- og JNI-koden som er nødvendig for å koble til de innfødte bibliotekene. Dette betyr at oppdateringer til OpenGL raskt kan legges til JOGL.

Hei Verden!

Jeg er fast troende på tradisjon, så selvfølgelig vil vi starte med en "Hello World". Denne Hello World vil undersøke installasjonen vår og fortelle oss om hele eller deler er installert riktig. Husk at det er to deler til JOGL-installasjonen. Det er Java-biblioteket i en jar-fil og den opprinnelige koden i et annet bibliotek.

Her er programmet vårt:

importere net.java.games.jogl. *;

offentlig klasse HelloWorld {public static void main (String args []) {try {System.loadLibrary ("jogl"); System.out.println ("Hello World! (De opprinnelige bibliotekene er installert.)"); GLCapabilities caps = nye GLCapabilities (); System.out.println ("Hei JOGL! (Krukken ser ut til å være tilgjengelig.)"); } fange (Unntak e) {System.out.println (e); }}}

Først tester dette programmet for å se om de innfødte og Java-bibliotekene er installert riktig. JOGL er bare riktig installert når jogl.jar og det opprinnelige biblioteket, kalt noe sånt libjogl.jnilib eller jogl.dll, er begge installert. Hvis det opprinnelige biblioteket ikke er tilgjengelig, vil dette programmet kaste et java.lang.UnsatisfiedLinkError unntak. Hvis JAR ikke er installert i klassestien, vil ikke programmet kompilere engang. Javac-kompilatoren vil si noe som ligner på "pakke net.java.games.jogl eksisterer ikke. "Når denne klassen kompilerer og kjører uten unntak, er du klar til å fortsette å lære JOGL.

En god mal

La oss gå videre til et par klasser som du kan synes det er nyttig å bruke som mal mens vi roter med JOGL. Jeg har brukt dem som maler mer enn en gang. Bruk dem gjerne slik du vil.

Denne malen består av to klasser. Den første er SimpleJoglApp vist nedenfor, og den andre er SimpleGLEventListener vist etter en kort beskrivelse. Du må skrive begge inn for å kompilere malen. Hovedappen:

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

/ ** * Dette er en grunnleggende JOGL-app. Du kan gjerne * bruke denne koden eller endre den. * / public class SimpleJoglApp utvider JFrame {public static void main (String [] args) {final SimpleJoglApp app = new SimpleJoglApp ();

// vis hva vi har gjort SwingUtilities.invokeLater (ny Runnable () {public void run () {app.setVisible (true);}}); }

offentlig SimpleJoglApp () {// sett JFrame-tittelen super ("Simple JOGL Application");

// drepe prosessen når JFrame er lukket setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);

// bare tre JOGL-kodelinjer ... og her er de GLCapabilities glcaps = new GLCapabilities (); GLCanvas glcanvas = GLDrawableFactory.getFactory (). CreateGLCanvas (glcaps); glcanvas.addGLEventListener (ny SimpleGLEventListener ());

// legg til GLCanvas akkurat som vi ville gjort hvilken som helst Component getContentPane (). add (glcanvas, BorderLayout.CENTER); setSize (500, 300);

// sentrer JFrame på skjermen centerWindow (dette); }

public void centerWindow (Component frame) {Dimension screenSize = Toolkit.getDefaultToolkit (). getScreenSize (); Dimensjon 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); }}

Det er det. La oss fokusere på de tre linjene med JOGL-spesifikk kode i denne første klassen. Å starte:

GLCapabilities glcaps = nye GLCapabilities ();

Dette bestemmer hvilke OpenGL / grafikkfunksjoner som er tilgjengelige for våre JOGL-biblioteker og JVM.

Neste:

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

Vi kan ikke skape GLCanvases eller GLJPanels. Vi må få dem opprettet for oss av a GLDrawableFactory. Så, vi henter en GLDrawableFactory ved hjelp av GLDrawableFactorysin statiske metode, getFactory ().

Nå har vi en GLDrawableFactory, så vi bruker den createGLCanvas () metode for å lage en GLCanvas å trekke på. Vi kunne ha brukt createGLJPanel () metode i stedet hvis vi hadde ønsket en Swing-komponent i stedet for en AWT-komponent.

Legg merke til at vi passerte i GLKapasiteter objekt vi opprettet tidligere. Dette gjør at GLDrawable vi har skapt for å bli skapt riktig.

Endelig er vi klare til å legge til en GLEventListener til GLCanvas:

glcanvas.addGLEventListener (ny SimpleGLEventListener ());

Vår implementering av GLEventListener er SimpleGLEventListener. Den tar seg av alle tegninger som må gjøres når den mottar et anrop fra GLDrawable og vår eneste GLCanvas. Som du vil se, bestemte jeg meg for ikke å tegne noe i dette programmet. Nå for GLEventListener:

importer java.awt. *; importer java.awt.event. *; importere net.java.games.jogl. *;

/ ** * For vårt formål er det bare to av * GLEventListeners som betyr noe. Disse ville være init () og display (). * / offentlig klasse SimpleGLEventListener implementerer GLEventListener {

/ ** * Ta vare på initialisering her. * / public void init (GLDrawable drawable) {

}

/ ** * Ta vare på tegningen her. * / public void display (GLDrawable drawable) {

}

/ ** * Kalt når GLDrawable (GLCanvas * eller GLJPanel) har endret seg i størrelse. Vi * trenger ikke dette, men du kan til slutt * trenge det - bare ikke ennå. * / public void reshape (GLDrawable drawable, int x, int y, int width, int height) {}

/ ** * Hvis skjermdybden endres mens * programmet kjører, kalles denne metoden. * I dag skjer dette ikke mye, med mindre * en programmerer har programmet sitt til å gjøre det. * / public void displayChanged (GLDrawable drawable, boolean modeChanged, boolean deviceChanged) {}}

Det er hjertet i JOGL-arbeidet vi skal gjøre. Legg merke til UML-grafikken nedenfor. SimpleJoglApp er en JFrame. Den inneholder vår GLDrawable, som faktisk er en GLCanvas, men ikke fortell ham det. Vi legger til SimpleGLEventListener, som implementerer GLEventListener til GLCanvasGLCanvas vet at vi bryr oss om han vil gjøre noe OpenGL-arbeid. GLDrawables kan snakke øret ditt, så du vil være sikker på at din GLEventListener er optimalisert ... for ekte.

Denne appen kan se litt kryptert avhengig av operativsystemet ditt. Dette er å forvente fordi du bare viser tilfeldige biter av minne på dette punktet. Så gratulerer med de nyoppdagede grafikktalentene dine.

Du er klar for den virkelige tingen

Når du har kjent deg med forrige eksempel, kan du lage et pent bilde.

Her er din neste app. Forsikre deg om at du skriver inn dette og alle eksemplene i. Feilsøking og rot med dem vil tjene til å raskt lære deg hvordan de fungerer.

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