JOGL
# 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 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 aquí 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.

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

