Java OpenGL

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).

Megoldás

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és és a szabványosítás állapota

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ó áttekintése: Java párosítása az OpenGL API-val

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 )

Interakció a Java 2D és az OpenGL között

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:

Példa egy tetraéder felépítésére

3D tetraéder példa

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 ) { } }

Telepítés, csatlakoztatás és használat

A JOGL szállítása a következő részeket tartalmazza:

  • API dokumentáció.
  • A könyvtár futtatható kódjának számos szállítása különböző platformokra. Minden szállítás tartalmazza:
    • két bináris java könyvtár ( gluegen-rt.jarés jogl.jar), amelyeket a programozónak a futtatható java kódhoz kell csatlakoztatnia. A fájlok egy alkönyvtárban találhatóklib
    • további natív modulok – futásidejű környezet a JOGL könyvtárkód végrehajtásához. A fájlok egy alkönyvtárban találhatóklib
    • gyors üzembe helyezési útmutató (fájl Userguide.html (eng) ), JOGL-verziók felülvizsgálati előzményei (fájl CHANGELOG.txt (eng) ), szerzői jogi információk (fájl COPYRIGHT.txt (eng) ), licencinformációk (fájl (eng) ), gyors utasítások (fájl (angol) ). A fájlok a könyvtár gyökérkönyvtárában találhatókLICENSE-JOGL-[сигнатура версии].txt README.txt 
  • JOGL java könyvtár forráskódja
  • általános disztribúció, amely tartalmazza a teljes JOGL java binárist és a natív futási környezet összes változatát, a Java Web Start architektúra és a java kisalkalmazások alkalmazásaihoz
  • bináris java kód példák
  • példák forrás java kódja

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.

Jegyzetek

  1. [1] Archiválva : 2011. február 26. a Wayback Machine -nél
  2. A független opengl.org közösség szerint lásd: Programozási nyelvi kötések az OpenGL -hez Archiválva 2008. november 2., a Wayback Machine -nél

Lásd még

Linkek