Você está na página 1de 6

UNIVERSIDAD ANDINA DEL CUSCO FACULTAD DE INGENIERA

ESCUELA PROFESIONAL DE INGENIERA DE SISTEMAS


COMPUTACIN GRAFICA

: Herramientas de desarrollo de la Asignatura


Laboratorio 001

I) Objetivo
Proporcionar al estudiante opciones de herramientas de desarrollo para el desarrollo de aplicativos en la
asignatura de Computacin Grfica.
II) Marco conceptual

Introduccin a OpenGL
En OpenGL se proporciona una biblioteca bsica de funciones para especificar primitivas grficas, atributos,
transformaciones geomtricas, transformaciones de visualizacin y muchas otras operaciones. Est diseada para
ser independiente del hardware, por tanto, muchas operaciones, tales como las subrutinas de entrada y salida, no
estn incluidas en la biblioteca bsica. Sin embargo, las subrutinas de entrada y salida y muchas funciones
adicionales estn disponibles en bibliotecas auxiliares que se han desarrollado para programas OpenGL.

Sintaxis bsica de OpenGL


Los nombres de las funciones de la biblioteca bsica de OpenGL utilizan como prefijo gl.
glBegin, glClear, glCopyPixels, glPolygonMode
Todas las constantes comienzan con las letras GL en maysculas.
GL_2D, GL_RGB, GL_CCW, GWOLYGON, GL_AMB I ENT_AND_D IFFUSE
Las funciones de OpenGL tambin esperan tipos de datos especficos. Por ejemplo, GLbyte, GLshort, GLint, GLfloat,
GLdouble, GLboolean.

A algunos argumentos de funciones de OpenGL se les puede asignar valores empleando una matriz que enumera
un conjunto de valores de datos. Esta opcin se utiliza para especificar una lista de valores como un puntero a una
matriz, en lugar de especificar cada elemento de la lista explcitamente como un argumento. Un ejemplo tpico del
uso de esta opcin es la especificacin de los valores de las coordenadas xyz.

Bibliotecas relacionadas
Existe un gran nmero de bibliotecas relacionadas para la realizacin de operaciones especiales, adems de la
biblioteca bsica de OpenGL. La utilidad GLU (OpenGL Utility) proporciona subrutinas para la configuracin de las
matrices de visualizacin y proyeccin, descripcin de objetos complejos mediante lneas y aproximaciones
poligonales, visualizacin de cudricas y splines B empleando aproximaciones lineales, procesamiento de
operaciones de representacin de superficies y otras tareas complejas. Toda implementacin de OpenGL incluye la
biblioteca GLU. Todos los nombres de las funciones de GLU comienzan con el prefijo glu. Tambin existe un conjunto
de herramientas orientadas a objetos basado en OpenGL, llamado Open Inventor que proporciona subrutinas y
formas de objetos predefinidos para su uso en aplicaciones tridimensionales interactivas.
Para crear grficos utilizando OpenGL, necesitamos en primer lugar configurar una ventana de visualizacin en
nuestra pantalla de vdeo. Se trata simplemente de la zona rectangular de la pantalla en la que nuestra imagen se
mostrar. No podemos crear directamente la ventana de visualizacin con las funciones de OpenGL bsicas, ya que
esta biblioteca contiene nicamente funciones grficas independientes del dispositivo, y las operaciones de gestin
de ventanas dependen de la computadora que estemos utilizando. Sin embargo, existen varias bibliotecas de
sistema de ventanas que soportan las funciones de OpenGL en una gran variedad de mquinas. El kit de
herramientas GLUT (OpenGL Utility Toolkit) proporciona una biblioteca de funciones para interactuar con cualquier
sistema de ventanas. Las funciones de la biblioteca GLUT utilizan como prefijo glut. Esta biblioteca tambin contiene
mtodos para describir y representar superficies y curvas cudricas.

Programacin OpenGL en Java


OpenGL es compatible con principales sistemas operativos, funciona con cualquier sistema de ventanas, y se puede
utilizar desde muchos lenguajes de programacin. Ofrece total independencia de los protocolos de red y topologas.
En java existen APIs variadas que permite la escritura de aplicaciones OpenGL en java, por ejemplo las siguientes:
Proyecto JOGL soportado por OpenGL API (JSR-231), JOGL provee un acceso completo a las APIs de OpenGL
1.3 - 3.0.
Lightweight Java Game Library
Java 3D
UNIVERSIDAD ANDINA DEL CUSCO FACULTAD DE INGENIERA
ESCUELA PROFESIONAL DE INGENIERA DE SISTEMAS
COMPUTACIN GRAFICA

Java 3D for Mac OS X


OpenGL for Java (GL4Java)
YAJOGLB
jGL: a 3D graphics library for the Java

III) Prcticas.

1) Configuracin inicial de JOGL en Netbeans


Esta prctica est destinado a practicar la implementacin JOGL desde sus inicios. Ayuda a configurar una instalacin
reciente JOGL en Netbeans en Windows.
En primer lugar se necesita descargar JOGL. se puede descargar los ltimos binarios JOGL de http://schabby.de/jogl-
download/.
Para esta prctica se utiliz los binarios:
jogl-2.0-b752-20120504-windows-i586
gluegen-2.0-b552-20120504-windows-i586

Descargados estos archivos, debemos descomprimirlos y luego aadir a la librera de nuestra aplicacin en java los
paquetes de clases Jar siguientes:
gluegen-rt.jar
gluegen-rt-natives-windows-i586.jar
jogl.all.jar
jogl-all-natives-windows-i586.jar

Una vez cargados estos Jar en la librera crear las Renderer y Ventana como se muestra en la figura:

Clase Ventana

package geometrias.frontend;

import geometrias.Renderer_Punto;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.media.opengl.GLCapabilities;
import javax.media.opengl.GLProfile;
UNIVERSIDAD ANDINA DEL CUSCO FACULTAD DE INGENIERA
ESCUELA PROFESIONAL DE INGENIERA DE SISTEMAS
COMPUTACIN GRAFICA

import javax.media.opengl.awt.GLCanvas;
import javax.swing.JFrame;

/**
*
* @author
*/
public class Ventana {

public static void main(String[] args) {


// 1. Configuracin de OpenGL Version 2
GLProfile profile = GLProfile.get(GLProfile.GL2);
GLCapabilities capabilities = new GLCapabilities(profile);

// 2. Canvas es el aplicativo grfico que se empotra en un JFrame


GLCanvas glcanvas = new GLCanvas(capabilities);
glcanvas.addGLEventListener(new Renderer_Punto());
glcanvas.setSize(400, 400);

// 3. Crear la ventana para mostrar la aplicacin de dibujo


JFrame frame = new JFrame("Aplicacin de OpenGL");
frame.getContentPane().add(glcanvas);
// 4. Aadir el evento para cerrar la ventana
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent ev) {
System.exit(0);
}
});
// 5. Cambiar el tamao de la ventana y visualizarla
frame.setSize(frame.getContentPane().getPreferredSize());
frame.setVisible(true);
}
}

Clase Renderer_Punto

package geometrias;

import java.util.logging.Level;
import java.util.logging.Logger;
import javax.media.opengl.GL2;
import javax.media.opengl.GLAutoDrawable;
import javax.media.opengl.GLEventListener;

/**
*
* @author h
*/
public class Renderer_Punto implements GLEventListener {

static final Logger logger = Logger.getLogger("BasicLoggingExample");


//
private GL2 gl;
UNIVERSIDAD ANDINA DEL CUSCO FACULTAD DE INGENIERA
ESCUELA PROFESIONAL DE INGENIERA DE SISTEMAS
COMPUTACIN GRAFICA

@Override
public void init(GLAutoDrawable gLDrawable) {
logger.log(Level.INFO, "mtodo - init");
// Provee un objeto que enlaza las APIs del OpenGL
// Que se encargara de realizar las instrucciones de dibujos
gl = gLDrawable.getGL().getGL2();

// 6. Especificar el color del dibujo: gris


gl.glColor3f(0.5f, 0.5f, 0.5f);
gl.glDrawBuffer(GL2.GL_FRONT_AND_BACK);
}

@Override
public void reshape(GLAutoDrawable glad, int x, int y, int width,
int height) {
logger.log(Level.INFO, "Reshape");
// 7. Especificar el rea de dibujo (frame) utilizamos coordenadas
gl.glMatrixMode(GL2.GL_PROJECTION);
gl.glLoadIdentity();
gl.glOrtho(0, width, 0, height, -1.0, 1.0);
}

@Override
public void display(GLAutoDrawable drawable) {
logger.log(Level.INFO, "Display");
// 8. Especificar el dibujo de un punto
gl.glPointSize(10); // Determina el tamao de un punto
gl.glBegin(GL2.GL_POINTS);
gl.glVertex2i(350, 350);
gl.glEnd();
}
@Override
public void dispose(GLAutoDrawable glad) {
throw new UnsupportedOperationException("Not supported yet.");
}

Resultado:
UNIVERSIDAD ANDINA DEL CUSCO FACULTAD DE INGENIERA
ESCUELA PROFESIONAL DE INGENIERA DE SISTEMAS
COMPUTACIN GRAFICA

IV) Tarea
1) En base a la aplicacin de la prctica modifique la aplicacin cambiar el color de la ventana a blanco.
2) Modificar el programa de la prctica para dibujar puntos aleatorios en la ventana.
3) Modificar el programa de la prctica para que el programa pueda solicitar al usuario coordenadas de puntos para
que se dibujen en la ventana.

V) Referencias
JOGL in Eclipse: http://schabby.de/jogl-example-hello-world/
JOGL (Java OpenGL) Tutorial: http://www.land-of-kain.de/docs/jogl/
JogAmp: http://jogamp.org/
Ejemplos de Swing y JOGL: http://www.genedavissoftware.com/books/jogl/ljogl_ch2.html

VI) Solucin de Ejercicios


Ejercicio 2: Modificar el programa de la prctica para dibujar puntos aleatorios en la ventana.

La Clase Ventana no varia, solo se cambiar el Renderer_Punto utilizado en anteriores programas,


por esta nueva clase Renderer_Punto_Aleatorios. El mtodo Display es la que hace los dibujos
en este caso dibuja puntos, se ha aadido un bucle for donde se genera puntos aleatorios con la
el Math.Random y luego de ello se llama a un mtodo que dibujo un punto, de esta manera
obtenemos el dibujo de puntos.
package geometrias.puntos;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.media.opengl.GL
import javax.media.opengl.GL2;
import javax.media.opengl.GLAutoDrawable;
import javax.media.opengl.GLEventListener;

/** * * @author
UNIVERSIDAD ANDINA DEL CUSCO FACULTAD DE INGENIERA
ESCUELA PROFESIONAL DE INGENIERA DE SISTEMAS
COMPUTACIN GRAFICA

*/ public class Renderer_Punto_Aleatorios


implements GLEventListener { static final Logger logger = Logger.getLogger("BasicLoggingExample");
// protected GL2 gl; @Override public void init(GLAutoDrawable gLDrawable)
{ logger.log(Level.INFO, "mtodo - init");
// Provee un objeto que enlaza las APIs del OpenGL
// Que se encargara de realizar las instrucciones de dibujos gl = gLDrawable.getGL().getGL2();
// 6. Especificar el color del dibujo: Rojo gl.glColor3f(1.0f, 0.0f, 0.0f);
gl.glDrawBuffer(GL2.GL_FRONT_AND_BACK);
} @Override public void reshape(GLAutoDrawable glad, int x, int y, int width, int height) { logger.log(Level.INFO,
"Reshape");
// 7. Especificar el rea de dibujo (frame) utilizamos coordenadas gl.glMatrixMode(GL2.GL_PROJECTION);
gl.glLoadIdentity();
gl.glOrtho(0, width, 0, height, -1.0, 1.0);
} @Override public void display(GLAutoDrawable drawable) { for (int i = 1; i <= 20; i++) {
// 7. Generar un punto de coordenadas aleatorias
double x = Math.random() * 400; double y = Math.random() * 400;
// Especificar aleatoriamente el color de dibujo
gl.glColor3d(Math.random(), Math.random(),
Math.random()); gl.glPointSize(5);
// Dibujar un punto dibujarPunto(x, y); } } protected void dibujarPunto(double x, double y) {
gl.glBegin(GL.GL_POINTS); gl.glVertex2d(x, y); gl.glEnd(); } @Override public void dispose(GLAutoDrawable glad) {
// throw new UnsupportedOperationException("Not supported yet."); } }

Resultado: