Java OpenGL ( JSR-231 ) | |
---|---|
A valós idejű fénytörést bemutató képernyőkép a JOGL használatával Mac OS X rendszeren | |
Típusú | könyvtár |
Fejlesztő | JogAmp közösség |
Beírva | Jáva |
Operációs rendszer | platformközi |
Hardver platform | Java virtuális gép |
legújabb verzió | 2.3.2 ( 2015. október 10. ) |
Teszt verzió | 2.4.0 |
Engedély | 2 szakaszos BSD licenc |
Weboldal | jogamp.org/jogl/w… ( angol) |
A Java OpenGL (JOGL) egy olyan könyvtár, amely az OpenGL függvényeket közvetlenül a Java programozási nyelvhez köti . Ez a JSR-231 (Java Bindings to OpenGL) specifikáció referencia megvalósítása . Az opengl.org független közösség által bemutatott [1] (lásd: Programozási nyelv kötései OpenGL-hez ). A könyvtárat eredetileg Kenneth Bradley Russell és Christopher John Kline, majd később a Sun Microsystems Game Technology Groupja fejlesztette ki . Jelenleg ez egy független nyílt forráskódú projekt.
A JOGL hozzáférést biztosít a programozó számára az OpenGL API 2.0 specifikáció összes funkciójához és a vezető gyártók összes OpenGL-bővítményéhez [2] . A JOGL hozzáférést biztosít a két fő OpenGL-bővítményhez is - az OpenGL Helper Library-hez (GLU) és az OpenGL Developer Toolkit-hez (GLUT) (kivéve a GLUT ablakrendszerrel kapcsolatos szolgáltatásait, mivel a Java-nak saját többplatformja van magas szintű ablakrendszer AWT és Swing ) .
A JOGL-könyvtár számos további, a JSR-231 specifikációban nem szereplő osztályt is tartalmaz, amelyek az OpenGL-parancsok adatfeldolgozásának kényelmét szolgálják, és a Java nyelv jellemzőihez kapcsolódnak (például OpenGL fájl I / O adatok, előkészítés textúrák, adattömbök előkészítése OpenGL-hez).
A JOGL a JNI felületen keresztül valósítja meg a hozzáférést az OpenGL könyvtár C nyelven írt alacsony szintű API -jához . A JOGL megfelelő működéséhez feltételezzük, hogy a szoftver- és hardverkörnyezet támogatja az OpenGL-t.
A JOGL abban különbözik a többi OpenGL-burkolótól, hogy lényegében egyszerűen lehetővé teszi a programozó számára az OpenGL API-val való együttműködést azáltal, hogy az OpenGL-parancsokat a megfelelő metódusok meghívásával éri el a szokásos Java fejlesztői argumentumtípusokkal, több osztályba helyezve. az OpenGL funkcionalitásának beágyazása valamilyen vagy objektumorientált paradigmába. Valójában a legtöbb belső JOGL kódot automatikusan generálja a C fejlécfájlokból egy speciális segédprogram , a Gluegen , amelyet kifejezetten a JOGL létrehozásának megkönnyítésére írnak.
Ennek a megoldásnak megvannak a maga előnyei és hátrányai. Az OpenGL architektúrájának jellemzői, amely egyrészt egy diszkrét automata , másrészt egy procedurális API, nem felel meg a Java programozási megközelítésének. Az OpenGL API közvetlen hozzárendelése számos Java metódushoz azonban sokkal egyszerűbbé teszi a már C nyelven írt OpenGL kód Java-ra történő portolását. A JOGL alacsony absztrakciós szintje lehetővé teszi olyan programok készítését, amelyek a végrehajtási sebesség szempontjából meglehetősen hatékonyak, ugyanakkor bonyolítja a programozási folyamatot a magasabb absztrakciós szinthez és a valóban objektum-orientált wrapper könyvtárakhoz képest az OpenGL for Java-n keresztül. (például Java3D ). Továbbá, mivel a belső kód jelentős része automatikusan generálódik, az OpenGL bármilyen módosítását (például könyvtárfejlesztés vagy új bővítmények megjelenése) a fejlesztők gyorsan hozzáadhatják a JOGL-hez.
A fejlesztők szerint 2007-ben a JOGL támogatja az OpenGL 2.0 specifikáció összes funkciójához való teljes hozzáférést.
A JOGL 1.1.0-s verziójának legújabb stabil kiadása a JSR - 231 (Java Bindings for OpenGL) referencia megvalósítása.
A közelgő 1.1.1-es kiadásnak működnie kell a GLU NURBS kiegészítővel (hajlított vonalak és felületek rajzolása a szabványos GLU API-n keresztül). A tervek között szerepel egy átdolgozott JSR-231 1.1.1 specifikáció kiadása, és a NURBS-hez kapcsolódó belépési pontok hozzáadása a JSR-231 API-hoz. A 2.0.2-es verzió teljes hozzáférést biztosít az OpenGL API 1.0-4.3-as verzióihoz, valamint az ES 1, ES 2 és ES 3 specifikációkhoz és szinte az összes bővítményhez.
A JSR-231 specifikáció: Java (TM) kötés az OpenGL(R) API-hoz, Java(TM) kötődés az OpenGL(R) API -hoz ) modellt határoz meg az OpenGL könyvtár natív megvalósításának (egy adott megvalósításhoz való) összekapcsolására. operációs rendszer) a Java programozási nyelvre.
A JSR-231 specifikáció két csomagot határoz meg:
(JOGL-ben mindkét csomag egy jar fájlban jogl.jar van elhelyezve a könyvtárban )
A Java Standard Edition 1.6 - os verziójától kezdve a Java 2D API és az OpenGL JOGL-en keresztül kommunikálhat:
A program példát mutat egy tetraéder legegyszerűbb megrajzolására JOGL segítségével.
Osztály JavaRenderer – GLAutoDrawable3D-s jelenet rajzolására szolgál.
import com.jogamp.opengl.GL ; import com.jogamp.opengl.GL2 ; import com.jogamp.opengl.GLEventListener ; import com.jogamp.opengl.GLAutoDrawable ; import com.jogamp.opengl.glu.GLU ; public class JavaRenderer implementálja a GLEventListenert { private float rotateT = 0.0f ; privát statikus végleges GLU glu = új GLU (); public void display ( GLAutoDrawable gLDrawable ) { final GL2 gl = gLDrawable . getGL (). getGL2 (); gl . glClear ( GL . GL_COLOR_BUFFER_BIT ); gl . glClear ( GL . GL_DEPTH_BUFFER_BIT ); gl . glLoadIdentity (); gl . glTranslatef ( 0.0f , 0.0f , - 5.0f ); gl . glRotatef ( rotateT , 1.0f , 0.0f , 0.0f ); gl . glRotatef ( rotateT , 0.0f , 1.0f , 0.0f ); gl . glRotatef ( rotateT , 0.0f , 0.0f , 1.0f ); gl . glRotatef ( rotateT , 0.0f , 1.0f , 0.0f ); gl . glBegin ( GL2 . GL_TRIANGLES ); // Elülső gl . glColor3f ( 0.0f , 1.0f , 1.0f ); gl . glVertex3f ( 0.0f , 1.0f , 0.0f ); gl . glColor3f ( 0.0f , 0.0f , 1.0f ); gl . glVertex3f ( - 1.0f , - 1.0f , 1.0f ); gl . glColor3f ( 0.0f , 0.0f , 0.0f ); gl . glVertex3f ( 1.0f , - 1.0f , 1.0f ); // Jobb oldalra néző Elöl gl . glColor3f ( 0.0f , 1.0f , 1.0f ); gl . glVertex3f ( 0.0f , 1.0f , 0.0f ); gl . glColor3f ( 0.0f , 0.0f , 1.0f ); gl . glVertex3f ( 1.0f , - 1.0f , 1.0f ); gl . glColor3f ( 0.0f , 0.0f , 0.0f ); gl . glVertex3f ( 0.0f , - 1.0f , - 1.0f ); // Bal oldalra néző Elöl gl . glColor3f ( 0.0f , 1.0f , 1.0f ); gl . glVertex3f ( 0.0f , 1.0f , 0.0f ); gl . glColor3f ( 0.0f , 0.0f , 1.0f ); gl . glVertex3f ( 0.0f , - 1.0f , - 1.0f ); gl . glColor3f ( 0.0f , 0.0f , 0.0f ); gl . glVertex3f ( - 1.0f , - 1.0f , 1.0f ); // Alsó gl . glColor3f ( 0.0f , 0.0f , 0.0f ); gl . glVertex3f ( - 1.0f , - 1.0f , 1.0f ); gl . glColor3f ( 0.1f , 0.1f , 0.1f ); gl . glVertex3f ( 1.0f , - 1.0f , 1.0f ); gl . glColor3f ( 0,2f , 0,2f , 0,2f ); gl . glVertex3f ( 0.0f , - 1.0f , - 1.0f ); gl . keverék (); rotateT += 0,2f ; } public void init ( GLAutoDrawable gLDrawable ) { final GL2 gl = gLDrawable . getGL (). getGL2 (); gl . glShadeModel ( GL2 . GL_SMOOTH ); gl . glClearColor ( 0.0f , 0.0f , 0.0f , 0.0f ); gl . glClearDepth ( 1.0f ); gl . glEnable ( GL . GL_DEPTH_TEST ); gl . glDepthFunc ( GL . GL_LEQUAL ); gl . glHint ( GL2 . GL_PERSPECTIVE_CORRECTION_HINT , GL . GL_NICEST ); } public void átformálás ( GLAutoDrawable gLDrawable , int x , int y , int szélesség , int magasság ) { final GL2 gl = gLDrawable . getGL (). getGL2 (); if ( magasság <= 0 ) { magasság = 1 ; } végső úszó h = ( lebegés ) szélesség / ( lebegés ) magasság ; gl . glMatrixMode ( GL2 . GL_PROJECTION ); gl . glLoadIdentity (); glu . gluPerspective ( 50.0f , h , 1.0 , 1000.0 ); gl . glMatrixMode ( GL2 . GL_MODELVIEW ); gl . glLoadIdentity (); } public void dispose ( GLAutoDrawable arg0 ) { } }JavaDiaosztály – Az execute meghívásáért felelős fő osztály JavaRenderer. A kód 3D-s jelenetet rajzol a GLCanvas'e.
import java.awt.Frame ; import java.awt.event.KeyEvent ; import java.awt.event.KeyListener ; import java.awt.event.WindowAdapter ; import java.awt.event.WindowEvent ; import com.jogamp.opengl.awt.GLCanvas ; public class JavaDia megvalósítja Runnable , KeyListener { private static Thread displayT = new Thread ( new JavaDia ()); privát statikus logikai érték bQuit = false ; public static void main ( String [ ] args ) { displayT . start (); } public void run () { Frame frame = new Frame ( "Jogl 3D Shape/Rotation" ); GLCanvas canvas = új GLCanvas (); int méret = keret . getExtendedState (); vászon . addGLEventListener ( új JavaRenderer ()); keret . hozzá ( vászon ); keret . díszlet Díszítetlen ( igaz ); méret |= Keret . MAXIMIZED_BOTH ; keret . setExtendedState ( méret ); vászon . addKeyListener ( ez ); keret . csomag (); keret . setLocationRelativeTo ( null ); keret . addWindowListener ( new WindowAdapter () { public void windowClosing ( WindowEvent e ) { bQuit = true ; System . exit ( 0 ); } }); keret . setVisible ( igaz ); vászon . requestFocus (); while ( ! bQuit ) { vászon . kijelző (); } } public void key Pressed ( KeyEvent e ) { if ( e . getKeyCode ( ) == KeyEvent . VK_ESCAPE ) { displayT = null ; b Kilépés = igaz ; Rendszer . kilépés ( 0 ); } } public void keyReleased ( KeyEvent e ) { } public void keyTyped ( KeyEvent e ) { } }A JOGL szállítása a következő részeket tartalmazza:
A JOGL könyvtár minden része külön zip archívumban érkezik. A zip-archívum neve tükrözi az alkatrész nevét, a JOGL-verzióra vonatkozó információkat, valamint a hardver- és szoftverplatformra vonatkozó információkat, ha az alkatrész natív összetevőket tartalmaz.