Java OpenGL
Taller práctico
Objetivos de aprendizaje
Conocer las clases de Java que sirven de
interfaz para acceder a la funcionalidad de
OpenGL
Crear una aplicación mínima que utilice JOGL.
Posición de cámara y dibujo de una figura
básica
Dibujo de figuras empleando GLU
Iluminación
Texturas
Movimiento
Espacios y puntos de visión
Unacoordenada z positiva sale hacia la pantalla, una coordenada z negativa
va hacia dentro de la pantalla. La posición de la camara está determinada por
un punto, otro punto al cual se dirige la vision y un vector que define el
punto hacia donde se dirije la vista en el cielo (tambien un angulo de vision
pero ese se revisará posteriormente).
Integración de clases OpenGL
public class MyJoglCanvasextends GLCanvas implements GLEventListener {
public MyJoglCanvas(int width,int height, GLCapabilities capabilities){}
public void init(GLAutoDrawable drawable) {}
public void reshape(GLAutoDrawable drawable,int x,int y,int,
width,int height) {}
public void displayChanged(GLAutoDrawable drawable,
boolean modeChanged,
boolean deviceChanged) {}
public void display(GLAutoDrawable drawable) {}}
Implementar métodos de GLEventListener
El constructor especifica el tamaño inicial (size) de la ventana
así como también el mínimo de capacidades (capabilities)
requeridas para OpenGL.
El método init() se invoca por el evento AWT tan pronto como
la ventana esté lista; se pueden hacer algunas configuraciones
globales aquí.
Toda vez que se redimensione el canvas,se invocará reshape()
Ingoraremos completamente el método displayChanged. Este
se usa cuando se manejan múltiples escenarios.
Finalmente display(), se invoca cada vez que se re-dibuja la
escena. Aquí es donde se desarrolla todo el dibujo.
Ventana en blanco
public class MyJoglCanvas extends GLCanvas implements GLEventListener {
. . .
public MyJoglCanvas(int width, intheight, GLCapabilities capabilities)
{
super(capabilities);
setSize(width, height);
}
. . .
}
// En main se define el modo de video
GLCapabilities capabilities = new GLCapabilities();
capabilities.setRedBits(8);
capabilities.setBlueBits(8);
capabilities.setGreenBits(8);
capabilities.setAlphaBits(8);
Inicialización del Canvas (GLCanvas)
public class MyJoglCanvas extends GLCanvasimplements GLEventListener {
. . .
public void init(GLAutoDrawable drawable) {
GL gl = drawable.getGL();
drawable.setGL(new DebugGL(gl));
// Configuracion global.
gl.glEnable(GL.GL_DEPTH_TEST);
gl.glDepthFunc(GL.GL_LEQUAL);
gl.glShadeModel(GL.GL_SMOOTH);
gl.glHint(GL.GL_PERSPECTIVE_CORRECTION_HINT, GL.GL_NICEST);
gl.glClearColor(0f, 0f, 0f, 1f);
// Iniciar animador
animator = newFPSAnimator(this, 60);
animator.start();
}
. . .
}
Métodos y configuraciones de inicialización
Las primeras dos habilitan los buffers Z (siempre
necesarios para el dibujo en 3D) con la ultima
configuración (dibujar un rectangulo, una linea
será visible).
Se selecciona un modelo de sombra (GL_SMOOTH),
y hace la corrección necesaria (GL_NICEST).
El color de borrado es elcolor: negro (Black) sin ser
traslucido (alpha es 1), especificado para RGBA
como numeros flotantes.
Redimension y despliegue
public class MyJoglCanvas extends GLCanvas implements GLEventListener {
. . .
public void reshape(GLAutoDrawable drawable, int x, int y,
int width, int height) {
GL gl = drawable.getGL();
gl.glViewport(0, 0, width, height);
}
// El metodo display se invocará encada ciclo de animación
public void display(GLAutoDrawable drawable) {
GL gl = drawable.getGL();
gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);
. . .
}
. . .
}
Colocación de cámara
public class MyJoglCanvas extends GLCanvas implements GLEventListener {
. . .
public void init(GLAutoDrawable drawable) {
glu = new GLU();
}
public void display(GLAutoDrawable drawable) {...
Regístrate para leer el documento completo.