JOGL - Rotation

Dans ce chapitre, nous vous avons expliqué comment faire pivoter un objet à l'aide de JOGL. La rotation des objets peut être effectuée le long de l'un des trois axes, en utilisant leglRotatef(float angle, float x, float y, float z) méthode de GLMatrixFuncinterface. Vous devez passer un angle de rotation et les axes x, y, z comme paramètres de cette méthode.

Les étapes suivantes vous guident pour faire pivoter un objet avec succès -

  • Effacez le tampon de couleur et le tampon de profondeur initialement en utilisant gl.glClear(GL2.GL_COLOR_BUFFER_BIT | GL2.GL_DEPTH_BUFFER_BIT)méthode. Cette méthode efface l'état précédent de l'objet et rend la vue claire.

  • Réinitialisez la matrice de projection à l'aide du glLoadIdentity() méthode.

Instanciez la classe d'animateur et démarrez l'animateur à l'aide du start() méthode.

Classe FPSAnimator

Ci-dessous sont donnés les différents constructeurs de la classe FPSAnimator.

N ° Sr. Méthodes et descriptions
1

FPSAnimator(GLAutoDrawable drawable, int fps)

Il crée un FPSAnimator avec une valeur cible d'images par seconde donnée et un dessin initial à animer.

2

FPSAnimator(GLAutoDrawable drawable, int fps, boolean cheduleAtFixedRate)

Il crée un FPSAnimator avec une valeur cible d'images par seconde donnée, un dessin initial à animer et un indicateur indiquant s'il faut utiliser la planification à débit fixe.

3

FPSAnimator(int fps)

Il crée un FPSAnimator avec une valeur cible d'images par seconde donnée.

4 Il crée un FPSAnimator avec une valeur de trames par seconde cible donnée et un indicateur indiquant s'il faut utiliser la planification à débit fixe.

Il crée un FPSAnimator avec une valeur de trames par seconde cible donnée et un indicateur indiquant s'il faut utiliser la planification à débit fixe.

start() et stop()sont les deux méthodes importantes de cette classe. Le programme suivant montre comment faire pivoter un triangle à l'aide de la 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

Si vous compilez et exécutez le programme ci-dessus, il génère la sortie suivante. Ici, vous pouvez observer divers instantanés d'une rotation du triangle coloré autour de l'axe des x.