Programavimas

Sveiki, JOGL

Jau keletą metų programuotojas, norėjęs sukurti daug grafikos reikalaujančią programą, kurią būtų galima parduoti skirtingų operacinių sistemų vartotojams, turėjo vieną pasirinkimą - „OpenGL“. GL reiškia grafikos biblioteką. „OpenGL“ yra registruotas SGI prekės ženklas. „OpenGL“ pasireiškia kaip kryžminio platformos C programavimo API. Tačiau iš tikrųjų tai yra nuo aparatūros nepriklausanti programavimo sąsajos specifikacija.

„OpenGL“ skirtas grafikai kurti. Tai greita. Dažniausiai tai pagreitinta aparatūra. Atrodo, kad „OpenGL“ gali vizualiai padaryti viską, ko norėtumėte.

Deja, „OpenGL“ yra parašyta C. Pripažinkime, kad C nėra pati populiariausia kalba programuoti sudėtingas programas. Vienas iš didžiausių „OpenGL“ trūkumų yra tai, kad jūs negalite nieko padaryti be lango, kad įdėtumėte savo grafiką, tačiau „OpenGL“ nesuteikia priemonių jums sukurti „Windows“. Dėl to pradedantiesiems sunku išmokti „OpenGL“.

Laimei, buvo pristatytas GLUT („OpenGL Utility Toolkit“), palengvinantis vartotojų sukurtų langų, mygtukų ir įvykių tvarkymą. Vis dėlto mokymasis „OpenGL“ C ar net C ++ versijoje gali būti skausmingas naujiems programuotojams ar programuotojams, norintiems naudoti tikrą objektinį programavimą.

Tada atėjo JOGL

„Java“ yra galbūt populiariausia tikroji į objektą orientuota programavimo kalba. Buvo daug bandymų vesti „OpenGL“ su „Java“, tačiau pirmasis, kuris privertė visus atsistoti ir atkreipti dėmesį, buvo „Java Bindings for OpenGL“ arba „JOGL“. To priežastis yra ta, kad šias pastangas palaiko „Sun Microsystems“ („Java“ kūrėjai) ir SGI („OpenGL“ kūrėjai).

Šiais laikais „JOGL“ kuria „Sun“ žaidimų technologijų grupė. Jis pradėjo savo gyvenimą, kai džiunglės sukūrė Kenas Russelis ir Chrisas Kline'as. Russellas yra „Sun“ darbuotojas, dirbantis „HotSpot“ virtualioje mašinoje, turintis ilgametę 3D patirtį. Kline dirba iracionaliuose žaidimuose, taip pat yra labai patyręs 3D grafikos srityje.

Esu asmeniškai dėkingas už jų pastangas ir visų tų, kurie dirba su JOGL, pastangas. Buvo keletas bandymų suteikti prieigą prie „OpenGL“ per draugišką „Java“ API - tarp jų buvo „Java 3D“, „OpenGL for Java Technology“ (gl4java) ir „Lightweight Java Game Library“ (LWJGL). „JOGL“ yra pirmasis, su kuriuo jaučiausi patogiai.

JOGL yra „Sun“ palaikomas „Java“ klasių sąsajų rinkinys, skirtas „OpenGL“. Oho! Tai buvo gurkšnis.

3D modeliams rodyti naudojamas „OpenGL“. Tai yra galinga, greita ir bene didžiausia, kas nutiko „Java“ nuo tada, kai buvo pristatyta „Swing“. Naudodami „OpenGL“ per „JOGL“ galėsite kurti šaunius žaidimus ar modeliuoti situacijas, kurias sukurti gali būti per brangu. Parašyti „OpenGL“ apibūdinantys storieji tomai. Jie bus naudingi, kai žinosite savo kelią, bet dar ne. Turite sužinoti, kaip visa tai taikoma „Java“ API, kurios jums atskleidžia „OpenGL“. Jums taip pat reikia keleto pagrindinių įvadų net.java.games.jogl. * ir galbūt kai kurie matematikos atnaujintojai.

Turite JOGL?

Jei norite naudoti JOGL, turėsite gauti jogl.jar ir jį lydintis gimtasis kodas. Aš svajoju apie dieną, kai ji yra standartinė „Java“ diegimo dalis, tačiau kol kas tai yra tik tinkama svajonė.

Pirmasis triukas yra rasti dvejetainius failus jūsų OS ir juos išgauti. Aš juos radau adresu //games-binaries.dev.java.net/build/index.html. Kiekviena OS yra skirtinga, tačiau yra dvi diegimo dalys. jogl.jar turi būti dedami į sistemos klasės kelią, o dvejetainė biblioteka turi būti dedama visur, kur bibliotekos eina į jūsų OS. Jei pasiseks, turėsite diegimo programą, kuri tai padarys už jus. Jei neturite diegimo programos ir nežinote, kur ieškoti informacijos, kaip viską įdėti į savo kompiuterį, galite pradėti nuo nuorodų, kurias pateikiau šaltiniuose. Pirmasis mūsų kodo pavyzdys bus parašytas specialiai tam, kad patikrintume, ar viską įdiegėte teisingai, todėl iki tol jums nereikės jaudintis dėl savo diegimo testavimo.

„JOGL“ „Javadocs“

„Javadocs“ galima gauti toje pačioje vietoje kaip ir dvejetainis JOGL paskirstymas. Javadokai bus pavadinti kažkuo panašiu jogl-1.0-usrdoc.tar.

Jei naršote net.java.games.jogl paketą, greitai pastebėsite, kad kai kurios klasės yra didžiulės. GL yra puikus to pavyzdys. Negalima to atbaidyti. Greitai sužinosite, kad sugebate atlikti gana sudėtingą darbą, net turėdami tik nedideles JOGL žinias. Klasės, į kurias galbūt norėtumėte žvilgtelėti dabar:

  • GLDrawable
  • GLCanvas
  • GLJPanel
  • GLC gebėjimai
  • GLDrawableFactory

Tai bus jūsų pagrindinė sąsaja į grafikos pasaulį. Jei prisimenate, anksčiau minėjau, kad vienas didžiausių „OpenGL“ mokančių pradedančiųjų trūkumų yra „Windows“ sistemos standarto nebuvimas. GLUT šiuo atžvilgiu padeda ilgą kelią mūsų C kolegoms, tačiau mes turime „Swing“ ir „AWT“ („Abstract Window Toolkit“). Labai tikėtina, kad jau naudojate AWT ar „Swing“, todėl nesijausite, kad visko mokotės nuo nulio. Tai yra geras dalykas. Po labai trumpo pristatymo, kaip ekrane rodyti JOGL komponentą, mums nereikės daug dirbti, kad galėtumėte paleisti šaunias ir populiarias programas!

„GlueGen“ ... beveik toks pat kietas kaip „JOGL“?

Kaip turėtumėte žinoti, „OpenGL“ yra parašyta C programuotojams. Tai reiškia, kad norint, kad „Java“ galėtų ja pasinaudoti, turi būti tam tikra vietinė sąsaja. Tai reiškia, kad norint užmegzti šį ryšį reikia parašyti JNI („Java Native Interface“), kuris nėra įdomus ar gražus. „OpenGL“ yra gana didelis. Visų tų ryšių užrašymas reikalauja laiko. Kad viskas būtų tik šiek tiek sunkiau, yra daugybė tiekėjui būdingų funkcijų, o „OpenGL“ vis tobulėja, o tai reiškia, kad yra pokyčių, kuriuos reikia neatsilikti. Trumpai tariant, „bet kam“, bandančiam neatsilikti nuo „OpenGL“, buvo gana sunku parašyti „Java“ į gimtąją sąsają, kuri yra visa apimanti.

Įveskite JOGL žmones. Jie nusprendė pasinaudoti C antraštės failais ir parašyti kodą, kuris jiems atliktų visą JNI darbą. Jie tai pavadino „GlueGen“. „GlueGen“ analizuoja C antraštės failus ir stebuklingai sukuria reikiamą „Java“ ir JNI kodą, reikalingą prisijungti prie tų vietinių bibliotekų. Tai reiškia, kad „OpenGL“ atnaujinimus galima greitai pridėti prie JOGL.

Labas pasauli!

Aš tvirtai tikiu tradicijomis, todėl, žinoma, pradėsime nuo „Labas pasaulis“. Šis „Sveikas pasaulis“ išnagrinės mūsų diegimą ir pasakys, ar visa ar dalis įdiegta teisingai. Atminkite, kad yra dvi JOGL diegimo dalys. „Jar“ faile yra „Java“ biblioteka, o kitoje bibliotekoje - gimtasis kodas.

Čia yra mūsų programa:

importuoti net.java.games.jogl. *;

public class HelloWorld {public static void main (String args []) {pabandykite {System.loadLibrary ("jogl"); System.out.println ("Labas pasaulis! (Įdiegtos vietinės bibliotekos.)"); GLCapability caps = new GLCapability (); System.out.println ("Sveiki, JOGL! (Atrodo, kad stiklainį galima įsigyti.)"); } sugavimas (e išimtis) {System.out.println (e); }}}

Pirma, ši programa patikrina, ar teisingai įdiegtos savosios ir „Java“ bibliotekos. JOGL tinkamai įdiegtas tik tada, kai jogl.jar ir gimtoji biblioteka, pavadinta panašiai libjogl.jnilib arba jogl.dll, abu yra įdiegti. Jei gimtoji biblioteka nėra prieinama, ši programa išmeta a java.lang.UnsatisfiedLinkError išimtis. Jei JAR nėra įdiegtas klasės kelyje, programa net nekompiliuos. „Java“ kompiliatorius pasakys kažką panašaus į „paketą“ net.java.games.jogl nėra. "Kai ši klasė kaupia ir veikia be išimčių, esate pasirengę toliau mokytis JOGL.

Geras šablonas

Pereikime prie kelių klasių, kurias galite naudoti naudodamiesi šablonu, kai kalbate su JOGL. Aš juos ne kartą naudojau kaip šablonus. Nesivaržykite jų naudoti taip, kaip jums patinka.

Šabloną sudaro dvi klasės. Pirmasis yra „SimpleJoglApp“ parodyta žemiau, o antrasis yra „SimpleGLEventListener“ rodomas po trumpo aprašymo. Norėdami sudaryti šabloną, turėsite įvesti abu. Pagrindinė programa:

importuoti java.awt. *; importuoti java.awt.event. *; importuoti javax.swing. *; importuoti net.java.games.jogl. *;

/ ** * Tai pagrindinė JOGL programa. Nesivaržykite * pakartotinai naudoti šį kodą arba jį modifikuoti. * / public class SimpleJoglApp praplečia JFrame {public static void main (String [] args) {final SimpleJoglApp app = new SimpleJoglApp ();

// parodyti, ką mes padarėme SwingUtilities.invokeLater (new Runnable () {public void run () {app.setVisible (true);}}); }

public SimpleJoglApp () {// nustatykite JFrame pavadinimą super („Paprasta JOGL programa“);

// nužudyti procesą uždarius JFrame setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);

// tik trys JOGL kodo eilutės ... ir čia jie yra GLCapabilities glcaps = new GLCapability (); GLCanvas glcanvas = GLDrawableFactory.getFactory (). CreateGLCanvas (glcaps); glcanvas.addGLEventListener (naujas SimpleGLEventListener ());

// pridėkite GLCanvas taip pat, kaip ir bet kurį komponentą getContentPane (). add (glcanvas, BorderLayout.CENTER); setSize (500, 300);

// centruoti JFrame ekrane centreWindow (this); }

public void centerWindow (komponento rėmas) {Dimension screenSize = Toolkit.getDefaultToolkit (). getScreenSize (); Matmenų 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); }}

Viskas. Sutelkime dėmesį į tris pirmosios klasės JOGL kodo eilutes. Pradėti:

GLCapability glcaps = new GLCapability ();

Tai nustato, kokios „OpenGL“ / grafikos funkcijos yra prieinamos mūsų JOGL bibliotekoms ir JVM.

Kitas:

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

Mes negalime kurti GLCanvases arba GLJPanels. Mes turime juos sukurti mums GLDrawableFactory. Taigi, mes gauname a GLDrawableFactory naudojant GLDrawableFactorystatinis metodas, getFactory ().

Dabar mes turime GLDrawableFactory, todėl mes naudojame jį createGLCanvas () metodas sukurti GLCanvas pasitelkti. Mes galėjome naudoti createGLJPanel () metodas, jei mes norėjome „Swing“ komponento, o ne „AWT“ komponento.

Atkreipkite dėmesį, kad pravažiavome GLC gebėjimai objektą, kurį sukūrėme anksčiau. Tai leidžia GLDrawable mes sukūrėme, kad būtume tinkamai sukurti.

Galiausiai esame pasirengę pridėti a „GLEventListener“ į GLCanvas:

glcanvas.addGLEventListener (naujas SimpleGLEventListener ());

Mūsų įgyvendinimas „GLEventListener“ yra „SimpleGLEventListener“. Ji pasirūpins visais piešiniais, kuriuos reikia padaryti, kai gaus skambutį iš GLDrawable ir mūsų vienintelis GLCanvas. Kaip pamatysite, nusprendžiau nieko nepiešti šioje programoje. Dabar „GLEventListener“:

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

/ ** * Mūsų tikslams svarbu tik du iš * GLEventListeners. Tai būtų * init () ir display (). * / viešoji klasė „SimpleGLEventListener“ įgyvendina „GLEventListener“ {

/ ** * Čia pasirūpinkite inicializavimu. * / public void init (GLDrawable drawable) {

}

/ ** * Čia pasirūpinkite piešimu. * / viešas negaliojantis ekranas (GLDrawable drawable) {

}

/ ** * Skambinama, kai pasikeičia GLDrawable (GLCanvas * arba GLJPanel) dydis. Mums to neprireiks, bet jums galiausiai gali prireikti - tik dar ne. * / public void reshape (GLDrawable drawable, int x, int y, int plot, int height) {}

/ ** * Jei ekrano gylis keičiamas, kai programa * veikia, vadinamas šis metodas. * Šiais laikais tai vyksta nedaug, nebent * programuotojas turi tai padaryti. * / public void displayChanged (GLDrawable drawable, Boolean modeChanged, Boolean deviceChanged) {}}

Tai yra JOGL darbo, kurį atliksime, esmė. Atkreipkite dėmesį į toliau pateiktą UML grafiką. „SimpleJoglApp“ yra JFrame. Jame yra mūsų GLDrawable, kuris iš tikrųjų yra a GLCanvas, bet nesakyk jam to. Pridedame „SimpleGLEventListener“, kuris įgyvendina „GLEventListener“ į GLCanvas Taigi GLCanvas žino, kad mums rūpi, ar jis nori atlikti kokį nors „OpenGL“ darbą. GLDrawables gali išjungti ausį, todėl norėsite įsitikinti, kad: „GLEventListener“ yra optimizuotas ... iš tikrųjų.

Ši programa gali atrodyti šiek tiek šifruota, priklausomai nuo jūsų OS. To galima tikėtis, nes šiuo metu jūs tiesiog rodote atsitiktinius atminties bitus. Taigi sveikinu su naujai atrastais grafikos talentais.

Jūs pasiruošę tikram dalykui

Susipažinę su ankstesniu pavyzdžiu, padarykite gražų paveikslėlį.

Čia yra kita jūsų programa. Įsitikinkite, kad įvedėte šį ir visus pavyzdžius. Derinimas ir netvarkymas su jais padės greitai išmokyti, kaip jie veikia.

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