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

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


Скачать книгу
ahí el mensaje?

figura14

      Figura 2.6 Salida de HolaMundo. Fuente: Elaboración propia.

      Con esto se concluye con los principios fundamentales para la programación con OpenGL 2 para java. Continuaremos con las primitivas gráficas.

      Capítulo 3

      Primitivas Gráficas

      Continuando con las características de los principios básicos de la programación con JOGL, se presenta el manejo de las gráficas primitivas.

      Las primitivas gráficas que maneja JOGL [Villar, 2009] son una serie de puntos y polígonos que son controlados por puntos en el espacio bidimensional y tridimensional, estos puntos son llamados vértices y se transcriben de la siguiente forma:

      • Lista de vértices: se encierran entre los comandos

      o glBegin(GLenum primitiva);

      o glEnd();

      donde GLenum primitiva pueden ser

      • Puntos, cuya característica es GL_POINTS

      • Líneas, cuyas características pueden ser GL_LINES, GL_LINE_STRIP, GL_LINE_LOOP.

      • Polígonos, cuyas características pueden ser Vértices CCW: GL_TRIANGLES, GL_TRIANGLE_STRIP, GL_TRIANGLE_FAN, GL_QUADS, GL_QUAD_STRIP, GL_POLYGON

      Para dibujar cada uno de ellos es necesario meter los valores en los siguientes comandos. Se especificarán en forma general y, por medio de ejemplos, veremos cómo se utiliza cada uno de ellos [Villar, 2009].

figura15

      Figura 3.1 Forma general de un comando:

       Fuente: Elaboración propia.

      Donde gl especifica la librería que se usa, Comando depende de la función que se va a ocupar, n corresponde a las coordenadas homogéneas que se utilizan, i hace referencia al tipo de dato, que se especifica mejor en la tabla 3.1; y por último v, si los parámetros van en forma de un vector.

      Nota: en Java, a diferencia de los otros lenguajes que pueden manejar OpenGL, cuando se usa la instrucción v debe llevar un parámetro más, indicando la posición del arreglo donde comienza a leer los datos del vector. Su forma se verá más adelante en un ejemplo.

Letra Tipo Dato Tipo en Java Definición en OpenGL
s Entero 32 bits short GLshort
i Entero 64 bits int GLint
f Punto flotante 32 bits float GLfloat
d Punto floyante 64 bits double GLdouble

      Tabla 3.1 Tipos de Datos como parámetros.

       Fuente: Elaboración propia.

      Para ver un ejemplo generamos un programa llamado Puntos2D y las funciones involucradas en los cambios que hay que hacer son: init línea 2, display línea 15 y dibuja línea 23.

      1. @Override

      2. public void init(GLAutoDrawable glad) {

      3. final GL2 gl = glad.getGL().getGL2(); // Se genera un objeto de tipo

      3.1 // GL2

      4. final GLU glu = new GLU(); // Se genera un objeto de tipo GLU

      5. gl.glMatrixMode (GL2.GL_PROJECTION); // Se presenta el modo de

      6. // Proyección

      7. gl.glClearColor (1.0f, 1.0f, 1.0f, 0.0f); // Se coloca el color

      7.1 // blanco en el fondo

      8. // del canvas para dibujar. RGBA=(1,1,1,0)

      9. glu.gluOrtho2D (-10.0,10.0,-10.0,10.0); //Las dimensiones a trabajar

      9.1 // son de

      10. //-10 a 10 en x y de -10 a 10 en y

      11. gl.glMatrixMode(GL2.GL_MODELVIEW); // Se presenta el modo de vista

      12. gl.glLoadIdentity(); // Se coloca la matriz identidad para

      12.1 // operaciones.

      13. }

      14. @Override

      15. public void display(GLAutoDrawable glad) {

      16. final GL2 gl = glad.getGL().getGL2(); // Se genera un objeto de tipo

      16.1 // GL2

      17. gl.glClear(GL2.GL_COLOR_BUFFER_BIT); // Se limpia el buffer de color

      18. gl.glLoadIdentity(); // Se coloca la matriz identidad para operaciones

      19. dibuja(glad,0,0,2.5f);//Se invoca a la función dibuja, la “f”

      19.1 // significa para java

      20. // que el valor es de punto flotante

      21. gl.glFlush(); // Se limpian los bufferes

      22. }

      23. public void dibuja(GLAutoDrawable glad,float x1, float y1, float lado)

      24. {

      25. final GL2 gl = glad.getGL().getGL2(); // Se genera un objeto GL2

      26. gl.glPointSize(12f); // Se fija el tamaño del punto

      27. gl.glBegin(GL2.GL_POINTS); // Se comienzan a dibujar puntos

      28. gl.glColor3f(1, 0, 0); // Se activa el color rojo R=1

      29. gl.glVertex2f(x1-lado,y1-lado); // Se dibuja el punto en la

      29.1 // posición

      30. gl.glColor3f(0, 0, 1); // Se activa el color azul B=1

      31. gl.glVertex2f(x1-lado,y1+lado); // Se dibuja el punto en la

      31.1 // posición

      32. gl.glColor3f(0, 1, 0); // Se activa el color verde G=1

      33. gl.glVertex2f(x1+lado,y1+lado); // Se dibuja el punto en la

      33.1 //posición

      34. gl.glColor3f(0, 0, 0); // se desactivan todos los colores,

      34.1 // negro

      35. gl.glVertex2f(x1+lado,y1-lado); // Se dibuja el punto en la

      35.1 // posición

      36. gl.glEnd(); // Se termina de dibujar.

      37. }

      Código3.1 Puntos2D.java

figura16

      Figura 3.2 Salida del programa anterior

       Fuente: Elaboración propia.

      Hay que observar a los objetos GL2 en las líneas 3, 16 y 25, todos son generados en cada una de las funciones. Se les llaman variables (en el caso, son objetos) locales, ya que sólo van a ser reconocidas en las funciones que se


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