fbpx
Wikipedia

JOGL

Java OpenGL (JOGL) es una biblioteca que permite acceder a OpenGL mediante programación en Java. Actualmente está siendo desarrollado por el Game Technology Group de Sun Microsystems, y es la implementación de referencia para JSR-231 (Java Bindigs for OpenGL).

JOGL (JSR-231)
Información general
Tipo de programa Gráficos 3D por computadora (biblioteca/API)
Desarrollador Sun Microsystems Game Technology Group
Licencia BSD
Información técnica
Programado en Java
Plataformas admitidas máquina virtual Java
Versiones
Última versión estable 2.3.1 ( 27 de marzo de 2015)
Última versión en pruebas 2.3.1 ( 27 de marzo de 2015)
Enlaces
Sitio web oficial

JOGL permite acceder a la mayoría de características disponibles para los programadores de C, con la excepción de las llamadas a ventanas realizadas en GLUT (ya que Java contiene sus propios sistemas de ventanas, AWT y Swing), y algunas extensiones de OpenGL.

Diseño

La API OpenGL, escrita en C, es llamada por JOGL gracias a la Java Native Interface (JNI). Por tanto, el sistema en el que se está programando debe tener soporte para OpenGL para que pueda funcionar JOGL correctamente.

JOGL se diferencia de otras bibliotecas Java para OpenGL en que simplemente expone las funciones de la OpenGL, basadas en un lenguaje procedural (lenguaje C), por medio de métodos contenidos en unas pocas clases, en lugar de intentar realizar un mapeo completo del código OpenGL para transformarlo y adaptarlo al paradigma de orientación a objetos. De hecho, la mayoría del código de JOGL está en realidad autogenerado a partir de las cabeceras de las bibliotecas C de OpenGL, mediante una herramienta llamada Gluegen, que fue programada específicamente para dicho propósito.

Esta decisión en el diseño tiene sus ventajas y sus desventajas. La naturaleza procedural y de máquina de estados de OpenGL es inconsistente con la forma habitual de programar en Java, lo cual puede dejar perplejos a muchos programadores. Sin embargo, la conversión directa realizada de las funciones OpenGL a métodos Java, permite la conversión del código de aplicaciones C ya existentes mucho más simple. La fina capa de abstracción proporcionada por JOGL hace que la ejecución sea muy eficiente, aunque resulta mucho más difícil de programar que otras bibliotecas de mucho más alto nivel como Java3D. Dado que la mayoría del código está autogenerado, los cambios que se produzcan en OpenGL son rápidamente adaptados a JOGL.

Estado y estandarización

En 2007, JOGL proporciona acceso completa a la especificación 2.0 de OpenGL.

Es la implementación de referencia para la especificación JSR-231 (Java Bindings for OpenGL).

Interoperatibilidad Java2D / OpenGL

Dado que en la versión Java SE 6 de Java, la API Java2D (que permite crear gráficos de dos dimensiones en Java) y JOGL son interoperables, esto permite que:

  • Se puedan sobreescribir componentes Swing mediante renderizado en OpenGL.
  • Se puede dibujar gráficos 3D mediante OpenGL sobre Java2D (hay un ejemplo en el que se crea un botón mediante OpenGL).

Ejemplo de la programación de una Pirámide 3D

Este programa dibuja una pirámide 3D mediante JOGL.

JavaRenderer class — Esta clase usa GLAutoDrawable para generar la escena.

 import javax.media.opengl.GL; import javax.media.opengl.GLEventListener; import javax.media.opengl.GLAutoDrawable; import javax.media.opengl.glu.GLU; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; public class JavaRenderer implements GLEventListener, KeyListener { private float rotateT = 0.0f; private static final GLU glu = new GLU(); public void display(GLAutoDrawable gLDrawable) { final GL gl = gLDrawable.getGL(); 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(GL.GL_TRIANGLES); // Front 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); // Right Side Facing Front 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); // Left Side Facing Front 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); // Bottom 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.glEnd(); rotateT += 0.2f; } public void displayChanged(GLAutoDrawable gLDrawable, boolean modeChanged, boolean deviceChanged) { } public void init(GLAutoDrawable gLDrawable) { final GL gl = gLDrawable.getGL(); gl.glShadeModel(GL.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(GL.GL_PERSPECTIVE_CORRECTION_HINT, GL.GL_NICEST); gLDrawable.addKeyListener(this); } public void reshape(GLAutoDrawable gLDrawable, int x, int y, int width, int height) { final GL gl = gLDrawable.getGL(); if(height <= 0) { height = 1; } final float h = (float)width / (float)height; gl.glMatrixMode(GL.GL_PROJECTION); gl.glLoadIdentity(); glu.gluPerspective(50.0f, h, 1.0, 1000.0); gl.glMatrixMode(GL.GL_MODELVIEW); gl.glLoadIdentity(); } public void keyPressed(KeyEvent e) { if(e.getKeyCode() == KeyEvent.VK_ESCAPE) { // no hace falta llamar al método Animator#stop() System.exit(0); } } public void keyReleased(KeyEvent e) { } public void keyTyped(KeyEvent e) { } } 

Main class—El código dibuja la escena en la GLCanvas.

 import javax.media.opengl.GLCanvas; import java.awt.Frame; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import com.sun.opengl.util.Animator; public class Main { public static void main(String[] args) { Main app = new Main(); app.createAndRun(); } public void createAndRun() { Frame frame = new Frame("Jogl 3d Shape/Rotation"); GLCanvas canvas = new GLCanvas(); Animator animator = new Animator(canvas); animator.start(); canvas.addGLEventListener(new JavaRenderer()); frame.add(canvas); frame.setSize(640, 480); frame.setUndecorated(true); int size = frame.getExtendedState(); size |= Frame.MAXIMIZED_BOTH; frame.setExtendedState(size); frame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { // no hace falta llamar al método Animator#stop()si marca error eliminenla animator.stop(); System.exit(0); } }); frame.setVisible(true); canvas.requestFocus(); } } 

Véase también

  • Xith3D : una API de desarrollo gráfico que usa JOGL.
  • JMonkey Engine : una API de desarrollo gráfico que usaba JOGL (hasta que fue sustituida por LWJGL).
  • LWJGL : otra biblioteca Java que permite el acceso a OpenGL.
  • OpenGL

Enlaces externos

  • 3DzzD a Java 1.1 3D Api compatible con JOGL (diseñado para usar en Applets)
  • JSR-231 "Java Bindings for OpenGL"
  • tool kiet - Página con ejemplos usando JOGL.
  •   Datos: Q1676666

jogl, java, opengl, biblioteca, permite, acceder, opengl, mediante, programación, java, actualmente, está, siendo, desarrollado, game, technology, group, microsystems, implementación, referencia, para, java, bindigs, opengl, información, generaltipo, programag. Java OpenGL JOGL es una biblioteca que permite acceder a OpenGL mediante programacion en Java Actualmente esta siendo desarrollado por el Game Technology Group de Sun Microsystems y es la implementacion de referencia para JSR 231 Java Bindigs for OpenGL JOGL JSR 231 Informacion generalTipo de programaGraficos 3D por computadora biblioteca API DesarrolladorSun Microsystems Game Technology GroupLicenciaBSDInformacion tecnicaProgramado enJavaPlataformas admitidasmaquina virtual JavaVersionesUltima version estable2 3 1 27 de marzo de 2015 Ultima version en pruebas2 3 1 27 de marzo de 2015 EnlacesSitio web oficial editar datos en Wikidata JOGL permite acceder a la mayoria de caracteristicas disponibles para los programadores de C con la excepcion de las llamadas a ventanas realizadas en GLUT ya que Java contiene sus propios sistemas de ventanas AWT y Swing y algunas extensiones de OpenGL Indice 1 Diseno 2 Estado y estandarizacion 3 Interoperatibilidad Java2D OpenGL 4 Ejemplo de la programacion de una Piramide 3D 5 Vease tambien 6 Enlaces externosDiseno EditarLa API OpenGL escrita en C es llamada por JOGL gracias a la Java Native Interface JNI Por tanto el sistema en el que se esta programando debe tener soporte para OpenGL para que pueda funcionar JOGL correctamente JOGL se diferencia de otras bibliotecas Java para OpenGL en que simplemente expone las funciones de la OpenGL basadas en un lenguaje procedural lenguaje C por medio de metodos contenidos en unas pocas clases en lugar de intentar realizar un mapeo completo del codigo OpenGL para transformarlo y adaptarlo al paradigma de orientacion a objetos De hecho la mayoria del codigo de JOGL esta en realidad autogenerado a partir de las cabeceras de las bibliotecas C de OpenGL mediante una herramienta llamada Gluegen que fue programada especificamente para dicho proposito Esta decision en el diseno tiene sus ventajas y sus desventajas La naturaleza procedural y de maquina de estados de OpenGL es inconsistente con la forma habitual de programar en Java lo cual puede dejar perplejos a muchos programadores Sin embargo la conversion directa realizada de las funciones OpenGL a metodos Java permite la conversion del codigo de aplicaciones C ya existentes mucho mas simple La fina capa de abstraccion proporcionada por JOGL hace que la ejecucion sea muy eficiente aunque resulta mucho mas dificil de programar que otras bibliotecas de mucho mas alto nivel como Java3D Dado que la mayoria del codigo esta autogenerado los cambios que se produzcan en OpenGL son rapidamente adaptados a JOGL Estado y estandarizacion EditarEn 2007 JOGL proporciona acceso completa a la especificacion 2 0 de OpenGL Es la implementacion de referencia para la especificacion JSR 231 Java Bindings for OpenGL Interoperatibilidad Java2D OpenGL EditarDado que en la version Java SE 6 de Java la API Java2D que permite crear graficos de dos dimensiones en Java y JOGL son interoperables esto permite que Se puedan sobreescribir componentes Swing mediante renderizado en OpenGL Se puede dibujar graficos 3D mediante OpenGL sobre Java2D hay un ejemplo aqui en el que se crea un boton mediante OpenGL Ejemplo de la programacion de una Piramide 3D EditarEste programa dibuja una piramide 3D mediante JOGL JavaRenderer class Esta clase usa GLAutoDrawable para generar la escena import javax media opengl GL import javax media opengl GLEventListener import javax media opengl GLAutoDrawable import javax media opengl glu GLU import java awt event KeyEvent import java awt event KeyListener public class JavaRenderer implements GLEventListener KeyListener private float rotateT 0 0f private static final GLU glu new GLU public void display GLAutoDrawable gLDrawable final GL gl gLDrawable getGL 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 GL GL TRIANGLES Front 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 Right Side Facing Front 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 Left Side Facing Front 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 Bottom 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 glEnd rotateT 0 2f public void displayChanged GLAutoDrawable gLDrawable boolean modeChanged boolean deviceChanged public void init GLAutoDrawable gLDrawable final GL gl gLDrawable getGL gl glShadeModel GL 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 GL GL PERSPECTIVE CORRECTION HINT GL GL NICEST gLDrawable addKeyListener this public void reshape GLAutoDrawable gLDrawable int x int y int width int height final GL gl gLDrawable getGL if height lt 0 height 1 final float h float width float height gl glMatrixMode GL GL PROJECTION gl glLoadIdentity glu gluPerspective 50 0f h 1 0 1000 0 gl glMatrixMode GL GL MODELVIEW gl glLoadIdentity public void keyPressed KeyEvent e if e getKeyCode KeyEvent VK ESCAPE no hace falta llamar al metodo Animator stop System exit 0 public void keyReleased KeyEvent e public void keyTyped KeyEvent e Main class El codigo dibuja la escena en la GLCanvas import javax media opengl GLCanvas import java awt Frame import java awt event WindowAdapter import java awt event WindowEvent import com sun opengl util Animator public class Main public static void main String args Main app new Main app createAndRun public void createAndRun Frame frame new Frame Jogl 3d Shape Rotation GLCanvas canvas new GLCanvas Animator animator new Animator canvas animator start canvas addGLEventListener new JavaRenderer frame add canvas frame setSize 640 480 frame setUndecorated true int size frame getExtendedState size Frame MAXIMIZED BOTH frame setExtendedState size frame addWindowListener new WindowAdapter public void windowClosing WindowEvent e no hace falta llamar al metodo Animator stop si marca error eliminenla animator stop System exit 0 frame setVisible true canvas requestFocus Vease tambien EditarXith3D una API de desarrollo grafico que usa JOGL JMonkey Engine una API de desarrollo grafico que usaba JOGL hasta que fue sustituida por LWJGL LWJGL otra biblioteca Java que permite el acceso a OpenGL OpenGLEnlaces externos EditarJOGL en Java net 3DzzD a Java 1 1 3D Api compatible con JOGL disenado para usar en Applets JSR 231 Java Bindings for OpenGL tool kiet Pagina con ejemplos usando JOGL Tutoriales de Nehe usando OpenGL Port de los tutoriales de Nehe a JOGL JSR 231 Specification draft Datos Q1676666 Obtenido de https es wikipedia org w index php title JOGL amp oldid 146946486, wikipedia, wiki, leyendo, leer, libro, biblioteca,

español

, española, descargar, gratis, descargar gratis, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, imagen, música, canción, película, libro, juego, juegos