JOGL - Rotazione

In questo capitolo abbiamo spiegato come ruotare un oggetto usando JOGL. La rotazione degli oggetti può essere eseguita lungo uno qualsiasi dei tre assi, utilizzando ilglRotatef(float angle, float x, float y, float z) metodo di GLMatrixFuncinterfaccia. È necessario passare un angolo di rotazione e gli assi x, y, z come parametri a questo metodo.

I seguenti passaggi ti guidano a ruotare un oggetto con successo:

  • Cancella il buffer di colore e il buffer di profondità inizialmente utilizzando gl.glClear(GL2.GL_COLOR_BUFFER_BIT | GL2.GL_DEPTH_BUFFER_BIT)metodo. Questo metodo cancella lo stato precedente dell'oggetto e rende chiara la vista.

  • Reimpostare la matrice di proiezione utilizzando il glLoadIdentity() metodo.

Crea un'istanza della classe animatore e avvia l'animatore utilizzando il file start() metodo.

Classe FPSAnimator

Di seguito sono riportati i vari costruttori della classe FPSAnimator.

Sr.No. Metodi e descrizioni
1

FPSAnimator(GLAutoDrawable drawable, int fps)

Crea un FPSAnimator con un determinato valore di fotogrammi al secondo di destinazione e un disegnabile iniziale per l'animazione.

2

FPSAnimator(GLAutoDrawable drawable, int fps, boolean cheduleAtFixedRate)

Crea un FPSAnimator con un determinato valore di fotogrammi al secondo di destinazione, un disegno iniziale da animare e un flag che indica se utilizzare la pianificazione a velocità fissa.

3

FPSAnimator(int fps)

Crea un FPSAnimator con un determinato valore di frame al secondo di destinazione.

4 Crea un FPSAnimator con un determinato valore di frame al secondo di destinazione e un flag che indica se utilizzare la pianificazione a velocità fissa.

Crea un FPSAnimator con un determinato valore di frame al secondo di destinazione e un flag che indica se utilizzare la pianificazione a velocità fissa.

start() e stop()sono i due metodi importanti in questa classe. Il seguente programma mostra come ruotare un triangolo usando 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

Se compili ed esegui il programma sopra, genera il seguente output. Qui puoi osservare varie istantanee di una rotazione del triangolo colorato attorno all'asse x.