JOGL - Rotación
En este capítulo le explicamos cómo rotar un objeto usando JOGL. La rotación de objetos se puede realizar a lo largo de cualquiera de los tres ejes, utilizando elglRotatef(float angle, float x, float y, float z) método de GLMatrixFuncinterfaz. Debe pasar un ángulo de rotación y los ejes x, y, z como parámetros para este método.
Los siguientes pasos lo guían para rotar un objeto correctamente:
Borre el búfer de color y el búfer de profundidad inicialmente usando gl.glClear(GL2.GL_COLOR_BUFFER_BIT | GL2.GL_DEPTH_BUFFER_BIT)método. Este método borra el estado anterior del objeto y aclara la vista.
Restablezca la matriz de proyección usando el glLoadIdentity() método.
Cree una instancia de la clase de animador e inicie el animador usando el start() método.
Clase FPSAnimator
A continuación se muestran los distintos constructores de la clase FPSAnimator.
No Señor. | Métodos y descripciones |
---|---|
1 | FPSAnimator(GLAutoDrawable drawable, int fps) Crea un FPSAnimator con un valor de fotogramas por segundo de destino dado y un dibujable inicial para animar. |
2 | FPSAnimator(GLAutoDrawable drawable, int fps, boolean cheduleAtFixedRate) Crea un FPSAnimator con un valor de fotogramas por segundo de destino determinado, un elemento de dibujo inicial para animar y una bandera que indica si se debe utilizar la programación de tasa fija. |
3 | FPSAnimator(int fps) Crea un FPSAnimator con un valor de fotogramas por segundo de destino determinado. |
4 | Crea un FPSAnimator con un valor de fotogramas por segundo de destino determinado y una bandera que indica si se debe utilizar la programación de tasa fija. |
Crea un FPSAnimator con un valor de fotogramas por segundo de destino determinado y una bandera que indica si se debe utilizar la programación de tasa fija.
start() y stop()son los dos métodos importantes de esta clase. El siguiente programa muestra cómo rotar un triángulo usando la clase FPSAnimator -
import javax.media.opengl.GL2;
import javax.media.opengl.GLAutoDrawable;
import javax.media.opengl.GLCapabilities;
import javax.media.opengl.GLEventListener;
import javax.media.opengl.GLProfile;
import javax.media.opengl.awt.GLCanvas;
import javax.swing.JFrame;
import com.jogamp.opengl.util.FPSAnimator;
public class TriangleRotation implements GLEventListener {
private float rtri; //for angle of rotation
@Override
public void display( GLAutoDrawable drawable ) {
final GL2 gl = drawable.getGL().getGL2();
gl.glClear (GL2.GL_COLOR_BUFFER_BIT | GL2.GL_DEPTH_BUFFER_BIT );
// Clear The Screen And The Depth Buffer
gl.glLoadIdentity(); // Reset The View
//triangle rotation
gl.glRotatef( rtri, 0.0f, 1.0f, 0.0f );
// Drawing Using Triangles
gl.glBegin( GL2.GL_TRIANGLES );
gl.glColor3f( 1.0f, 0.0f, 0.0f ); // Red
gl.glVertex3f( 0.5f,0.7f,0.0f ); // Top
gl.glColor3f( 0.0f,1.0f,0.0f ); // blue
gl.glVertex3f( -0.2f,-0.50f,0.0f ); // Bottom Left
gl.glColor3f( 0.0f,0.0f,1.0f ); // green
gl.glVertex3f( 0.5f,-0.5f,0.0f ); // Bottom Right
gl.glEnd();
gl.glFlush();
rtri += 0.2f; //assigning the angle
}
@Override
public void dispose( GLAutoDrawable arg0 ) {
//method body
}
@Override
public void init( GLAutoDrawable arg0 ) {
// method body
}
@Override
public void reshape( GLAutoDrawable drawable, int x, int y, int width, int height ) {
public static void main( String[] args ) {
//getting the capabilities object of GL2 profile
final GLProfile profile = GLProfile.get(GLProfile.GL2 );
GLCapabilities capabilities = new GLCapabilities( profile );
// The canvas
final GLCanvas glcanvas = new GLCanvas( capabilities);
TriangleRotation triangle = new TriangleRotation();
glcanvas.addGLEventListener( triangle );
glcanvas.setSize( 400, 400 );
// creating frame
final JFrame frame = new JFrame ("Rotating Triangle");
// adding canvas to it
frame.getContentPane().add( glcanvas );
frame.setSize(frame.getContentPane() .getPreferredSize());
frame.setVisible( true );
//Instantiating and Initiating Animator
final FPSAnimator animator = new FPSAnimator(glcanvas, 300,true);
animator.start();
}
} //end of main
} //end of class
Si compila y ejecuta el programa anterior, genera la siguiente salida. Aquí, puede observar varias instantáneas de un triángulo de color girando alrededor del eje x.