Antes que todo, explicaremos cómo está conformada la estructura de un programa escrito en Java utilizando librerías de JOGL. Como la mayoría de ustedes saben, un programa escrito solamente en Java está conformado por un mínimo de cinco partes:

  1. La clase principal de nuestro programa.
  2. Las variables utilizadas por la clase.
  3. El constructor de la clase.
  4. Los métodos que utilizará la clase.
  5. El método principal (main) que comenzará la ejecución de nuestro programa.

Entonces, un programa sencillo en Java estaría escrito más o menos de la siguiente manera:

// Debemos importar los paquetes que vayamos a necesitar
import java.awt.*; // Por ejemplo

// Clase principal
public class MiClase
{
// Variable 1
// Variable 2

// . . .

// Variable n

// Constructor
public MiClase()
{
/* Aquí inicializamos las variables 1, 2, . . ., n
* declaradas anteriormente */
}

// Métodos que utilizará la clase "MiClase"

public void metodo_1()
{ }

public int metodo_2()
{ }

// . . .

public double metodo_n()
{ }

// Método principal
public static void main(String[] args)
{
/* Instanciación de los objetos de la clase "MiClase"
* Comenzará la ejecución del código */
}
} // Fin de la clase "MiClase"

Ahora bien, como trabajaremos con gráficos de OpenGL será necesario implementar la interfaz conocida con el nombre de GLEventListener además de que, debido a que debemos montar los gráficos en alguna parte, tenemos que extender de la clase JFrame o JPanel.

La interfaz GLEventListener declara eventos los cuales son utilizados por el código cliente para manipular el renderizado de OpenGL a travez de GLAutodrawable.

Para que tengan una idea más clara, algo parecido ocurre cuando implementan la interfaz ActionListener para escuchar los eventos de los botones los cuales son manipulados por el código cliente a través de ActionEvent.

La interfaz GLEventListener utiliza cuatro métodos principales los cuales será necesario declarar dentro de la estructura de nuestro programa para que éste funcione.

1 -public void init(GLAutodrawable drawable)

Este método es llamado por drawable inmediatamente después de que el contexto de OpenGL (procedimiento que realizará un objeto GLCanvas) es inicializado. Puede ser utilizado para la inicialización de los gráficos de OpenGL que GLCanvas utilizará tales como el color de fondo, color de los objetos que se dibujarán, luces que se manejarán, etc.

2 - public void reshape(GLAutodrawable drawable, int x, int y, int width, int height)

Este método es llamado por drawable durante el primer redibujado (repaint) y después de que el componente se redimensiona (resize). El cliente puede actualizar el punto de vista (viewport) de los gráficos apropiadamente.

3 - public void display(GLAutodrawable drawable)

Este método es llamado por drawable para iniciar el renderizado de OpenGL a petición del cliente. Dentro de este método se incluirán los gráficos que GLCanvas dibujará y será llamado cada vez que se le solicite, o bien, cuando todos los GLEventListeners hayan sido notificados de que ocurrió algún evento.

4 - public void displayChanged(GLAutodrawable, boolean modeChanged, boolean deviceChanged)

Este método es llamado por drawable cuando ocurre algún cambio en el visualizador (pantalla) asociado con GLAutoDrawable. Los dos parámetros de tipo boolean indican el tipo de cambio que ha ocurrido.

Para que se tenga una idea más clara sobre los cambios que pueden ocurrir en el visualizador (pantalla) se presentan dos ejemplos:
  1. Cambio de modo de pantalla (display mode changed). Esto ocurre cuando, por ejemplo, la calidad del color cambia (digamos de 32-bits a 16-bits) en un monitor donde el GLAutoDrawable está siendo dibujado.
  2. Cambio de visualizador (display device changed). Esto ocurre cuando, por ejemplo, el usuario arrastra una ventana que contiene un GLAutoDrawable de un monitor a otro en una configuración de múltiples monitores con diferentes resoluciones.
Por lo tanto, un programa escrito en Java utilizando librerías JOGL estaría escrito más o menos de la siguiente manera:

// Debemos importar los paquetes de Java que vayamos a necesitar
import java.awt.*; // Por ejemplo
// Debemos importar las librerías de JOGL que vayamos a necesitar
import javax.media.opengl.*; // Por ejemplo

// Clase principal que extenderá de JFrame e implementará
// la interfaz GLEventListener
public class MiClase extends JFrame implements GLEventListener
{
// Variable 1
// Variable 2

// . . .

// Variable n


// La interfaz GL nos permitirá el acceso a todos
// los métodos utilizados por OpenGL

static GL gl;

/* La clase GLCanvas nos proporciona el soporte para
* el renderizado
de los gráficos de OpenGL, es decir,
* dentro de este objeto se dibujarán
los gráficos
* creados. */

static GLCanvas canvas;

// Constructor
public MiClase()
{
/* Aquí inicializamos las variables 1, 2, . . ., n
* declaradas anteriormente, así como
* todas las variables de las librerías JOGL */

}

// Métodos que utilizará la clase "MiClase"

public void metodo_1()
{ }

public int metodo_2()
{ }

// . . .

public double metodo_n()
{ }

/* Aquí agregamos los métodos que utilizará la
* interfaz GLEventListener */

public void init(GLAutoDrawable drawable)
{
/* Este método es el que inicializará
* los gráficos de OpenGL que GLCanvas utilizará,
* para llamar a las funciones de OpenGL
* utilizaremos el objeto gl
* instanciado anteriormente. */
}

public void reshape(GLAutoDrawable drawable,
int x, int y, int anchura, int altura)
{
/* Este método, como se explicó, se utiliza para que
* el usuario pueda modificar el "viewport" de los
* gráficos adecuadamente */
}

public void display(GLAutoDrawable drawable)
{
/* Este método es utilizado para crear todos
* los gráficos que se dibujarán dentro del
* objeto GLCanvas */
}

public void displayChanged(GLAutoDrawable drawable,
boolean modeChanged,
boolean deviceChanged)
{
/* Método para el manejo de eventos del cambio de
* visualizador. */
}

// Método principal
public static void main(String[] args)
{
/* Instanciación de los objetos de la clase "MiClase"
* Comenzará la ejecución del código */
}
} // Fin de la clase "MiClase"

Hasta el momento no hemos creado algún código que produzca algún resultado, lo anterior simplemente fue un ejemplo de la apariencia que debe tener un programa escrito en Java utilizando librerías con OpenGL. En la siguiente entrada de este blog mostraremos el ejemplo, ahora sí, de un programa que mostrará algo en pantalla.

2 opiniones:

Rosa María dijo...

Tu Blog es EXCELENTE, tiene la estructura en el orden que vá y es en lo que tengo broncas.
F E L I C I D A D E S .

Tú eres parte de lo que JAVA necesita.

Anónimo dijo...

Pretty section of content. I just stumbled upon your blog and in
accession capital to assert that I get in fact enjoyed account your blog posts.
Anyway I will be subscribing to your augment and
even I achievement you access consistently rapidly.


Also visit my blog post ... home cellulite treatment