Gráficos por computadora usando JOGL. Oscar Gabriel Caballero Martínez
ahí el mensaje?
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].
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
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