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.