Gráficos por computadora usando JOGL. Oscar Gabriel Caballero Martínez

Gráficos por computadora usando JOGL - Oscar Gabriel Caballero Martínez


Скачать книгу

      50. public void dispose(GLAutoDrawable glad) {

      51. }

      52. @Override

      53. public void display(GLAutoDrawable glad) {

      54. }

      55. @Override

      56. public void reshape(GLAutoDrawable glad, int i, int i1, int i2, int i3){

      57. }

      58. }

      Código 2.2 Plantilla para las clases

      El ${name} de la línea 21 y el ${date} de la línea 18 son variables del sistema que toma la plantilla para colocarlos en el lugar correspondiente. ${name} es el nombre del programa y ${date} es la fecha actual de la máquina local.

      Nota: Esto va a quedar estipulado siempre en todos los programas que se hagan durante el trabajo, si se hace alguna modificación a esto en cada programa se especificarán únicamente las funciones que se modificarán.

      De la línea 1 a la línea 7 se importan paquetes que se van a utilizar todo el tiempo, especificados para lo siguiente:

      1. com.jogamp.opengl.GLAutoDrawable es la clase con la que se trabajan los objetos que permiten dibujar en el lienzo.

      2. import com.jogamp.opengl.GLEventListener es la clase que ayuda a escuchar los eventos que ocurren en el lienzo.

      3. import com.jogamp.opengl.awt.GLCanvas es la clase que permite colocar el lienzo para dibujar en el Frame.

      4. com.jogamp.opengl.util.Animator Es la clase que permite se esté animando la ejecución del programa, y así permitir que el dibujo pueda ser manipulado. Nota: para algunos programas no se necesita que esté redibujándose el dibujo, así que se eliminará. Se especificará dónde se hace.

      5. import java.awt.Frame es la clase que permite colocar el lienzo (GLCanvas) para poder dibujar.

      6. import java.awt.event.WindowAdapter Clase que permite colocar al Frame en cualquier parte de la pantalla y a su vez permite adaptar las acciones que se realizarán en el momento de cerrar la ventana. Dichas instrucciones se componen de la línea 29 a la 40, donde por medio de hilos se ligan las acciones a seguir.

      7. java.awt.event.WindowEvent Clase que se dispara en el momento que ha ocurrido algo en la ventana que contiene al Frame y a su vez, al Canvas.

      Las funciones con las que trabaja JOGL2 [jogamp, 2016] en cada programa son:

      void display(GLAutoDrawable glad) (línea 53): es llamado por el objeto de interfaz de GLAutoDrawable para iniciar la representación de OpenGL por el cliente; es decir, este método contiene la lógica utilizada para dibujar los elementos gráficos que utilizan las API de OpenGL

      void dispose(GLAutoDrawable glad) (línea 50): este método activa al listener para llevar a cabo la liberación de todos los recursos de OpenGL por cada GLContext , tales como buffers de memoria y programas GLSL.

      void init(GLAutoDrawable glad) (línea 47): Es llamada por la interfaz de GLAutoDrawable inmediatamente después de inicializar el contexto de OpenGL.

      void reshape(GLAutoDrwawble drawable, int i, int i1, int i2, int i3) (línea 56): Es llamada por la interfaz de GLAutoDrawable durante el primer repintado después de que el componente ha sido redimensionado. También se llama cuando la posición del componente en la ventana se cambia.

      A continuación un ejemplo: crearemos un nuevo class llamado HolaMundo.

      1. import com.jogamp.opengl.GL2;

      2. import com.jogamp.opengl.GLAutoDrawable;

      3. import com.jogamp.opengl.GLEventListener;

      4. import com.jogamp.opengl.awt.GLCanvas;

      5. import com.jogamp.opengl.glu.GLU;

      6. import com.jogamp.opengl.util.Animator;

      7. import com.jogamp.opengl.util.gl2.GLUT;

      8. import java.awt.Frame;

      9. import java.awt.event.WindowAdapter;

      10. import java.awt.event.WindowEvent;

      En comparación con el código anterior, se han importado 3 nuevas clases: la de la línea 1, la línea 5 y la línea 7. En la línea 1 se importa la clase GL2 donde están todos los métodos que se utilizan para trabajar con GraphicsLibreries versión 2. En la línea 5 se utiliza la clase GLU que contiene los métodos relacionados con la OpenGL Utility. Y la línea 7 la clase GLUT que le corresponden a la clase OpenGL Utilities Tools.

      Las funciones que se modifican con respecto al código anterior son:

      1. @Override

      2. public void init(GLAutoDrawable glad) {

      3. final GL2 gl = glad.getGL().getGL2();

      4. final GLU glu = new GLU();

      5. gl.glMatrixMode (GL2.GL_PROJECTION);

      6. gl.glClearColor (1.0f, 1.0f, 1.0f, 0.0f);

      7. glu.gluOrtho2D (0.0, 200.0, 0.0, 150.0);

      8. }

      9.

      10. @Override

      11. public void display(GLAutoDrawable glad) {

      12. GL2 gl = glad.getGL().getGL2();

      13. GLUT glut = new GLUT();

      14. gl.glClear (GL2.GL_COLOR_BUFFER_BIT);

      15. gl.glColor3f (0.0f, 0.0f, 0.0f);

      16. gl.glMatrixMode (GL2.GL_MODELVIEW);

      17. gl.glLoadIdentity();

      18. gl.glRasterPos2i(10, 15);

      19. glut.glutBitmapString(GLUT.BITMAP_HELVETICA_10 , "Hola Mundo");

      20. }

      Código 2.3 HolaMundo.java

      Todas las funciones que le corresponden al objeto gl que está definido en las líneas 3 y 12 se enfocan en su análisis a lo largo del texto y posteriormente van a ser analizadas [TutorialOpenGL, 2016]. Para el objeto glu definido en la línea 4, la función gluOrtho2D que se usa es para generar un espacio ortogonal de dimensión 2 (línea 7) para para poder dibujar. Para el objeto glut definido en la línea 13 la función que se utiliza es glutBitmapString: define el tipo de letra con la característica GLUT.BITMAP_HELVETICA_10 para dibujar la cadena “Hola Mundo”.

      En la función init que comienza en la línea 2, su primera línea de código se define un objeto de tipo GL cuyos métodos y características son extraídos del objeto que llega como parámetro a la función.

      Para poder realizar todas las características de una escena se realizan operaciones entre matrices, así que la primera matriz para multiplicar será la del modo, y la que se define es de tipo proyección con la característica GL2.GL_PROJECTION. En la línea 6 se limpia el color. La función glColorClear recibe como parámetros 4 valores de tipo flotante, que en orden son las intensidades del rojo, verde y azul; el útimo parámetro le corresponde a la transparencia y es el color del fondo.

      Para la función display en la línea 14 se limpia el buffer de color con la característica GL2.GL_COLOR_BUFFER_BIT, después, en la línea 15, se define el color con el que se va a pintar, seguido del tipo de matriz a operar que se define con la característica GL2.GL_MODELVIEW (línea 16). Se establece la matriz identidad para realizar todas las operaciones (línea 17) y posteriormente se define la posición donde va a comenzar a dibujar el gl. Por último, se escribe el mensaje (línea


Скачать книгу