JOGL - Rotação
Neste capítulo, explicamos como girar um objeto usando JOGL. A rotação de objetos pode ser feita ao longo de qualquer um dos três eixos, usando oglRotatef(float angle, float x, float y, float z) método de GLMatrixFuncinterface. Você precisa passar um ângulo de rotação ex os eixos x, y, z como parâmetros para este método.
As etapas a seguir o guiam para girar um objeto com sucesso -
Limpe o buffer de cor e o buffer de profundidade inicialmente usando gl.glClear(GL2.GL_COLOR_BUFFER_BIT | GL2.GL_DEPTH_BUFFER_BIT)método. Este método apaga o estado anterior do objeto e torna a visualização clara.
Reinicie a matriz de projeção usando o glLoadIdentity() método.
Instancie a classe do animador e inicie o animador usando o start() método.
Classe FPSAnimator
Abaixo estão os vários construtores da classe FPSAnimator.
Sr. Não. | Métodos e Descrições |
---|---|
1 | FPSAnimator(GLAutoDrawable drawable, int fps) Ele cria um FPSAnimator com um determinado valor de quadros por segundo de destino e um drawable inicial para animar. |
2 | FPSAnimator(GLAutoDrawable drawable, int fps, boolean cheduleAtFixedRate) Ele cria um FPSAnimator com um determinado valor de quadros por segundo de destino, um drawable inicial para animar e um sinalizador indicando se deve ser usado o agendamento de taxa fixa. |
3 | FPSAnimator(int fps) Ele cria um FPSAnimator com um determinado valor de quadros por segundo de destino. |
4 | Ele cria um FPSAnimator com um determinado valor de quadros por segundo de destino e um sinalizador que indica se deve ser usado o agendamento de taxa fixa. |
Ele cria um FPSAnimator com um determinado valor de quadros por segundo de destino e um sinalizador que indica se deve ser usado o agendamento de taxa fixa.
start() e stop()são os dois métodos importantes nesta classe. O programa a seguir mostra como girar um triângulo usando a classe 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
Se você compilar e executar o programa acima, ele gerará a seguinte saída. Aqui, você pode observar vários instantâneos de um triângulo colorido girando em torno do eixo x.