JOGL - Rotasyon

Bu bölümde, JOGL kullanarak bir nesneyi nasıl döndüreceğinizi açıkladık. Nesnelerin döndürülmesi, üç eksenden herhangi biri boyunca yapılabilir.glRotatef(float angle, float x, float y, float z) yöntemi GLMatrixFuncarayüz. Bu yönteme bir dönme açısı ve parametre olarak x, y, z eksenleri aktarmanız gerekir.

Aşağıdaki adımlar, bir nesneyi başarıyla döndürmeniz için size yol gösterir -

  • Başlangıçta kullanarak renk arabelleğini ve derinlik arabelleğini temizleyin gl.glClear(GL2.GL_COLOR_BUFFER_BIT | GL2.GL_DEPTH_BUFFER_BIT)yöntem. Bu yöntem, nesnenin önceki durumunu siler ve görünümü netleştirir.

  • Projeksiyon matrisini sıfırlayın. glLoadIdentity() yöntem.

Animatör sınıfını örnekleyin ve animatörü kullanarak start() yöntem.

FPSAnimator Sınıfı

Aşağıda, FPSAnimator sınıfının çeşitli yapıcıları verilmiştir.

Sr.No. Yöntemler ve Açıklamalar
1

FPSAnimator(GLAutoDrawable drawable, int fps)

Belirli bir hedef kare / saniye değerine sahip bir FPSAnimator ve canlandırmak için bir başlangıç ​​çekilebilir oluşturur.

2

FPSAnimator(GLAutoDrawable drawable, int fps, boolean cheduleAtFixedRate)

Belirli bir saniyede kare hedef değerine sahip bir FPSAnimator, canlandırmak için bir başlangıç ​​çekilebilirliği ve sabit oranlı programlamanın kullanılıp kullanılmayacağını belirten bir bayrak oluşturur.

3

FPSAnimator(int fps)

Belirli bir saniye başına kare hedefi değerine sahip bir FPSAnimator oluşturur.

4 Belirli bir hedef kare / saniye değerine sahip bir FPSAnimator oluşturur ve sabit oranlı programlamanın kullanılıp kullanılmayacağını belirten bir bayrak oluşturur.

Belirli bir hedef kare / saniye değerine sahip bir FPSAnimator oluşturur ve sabit oranlı programlamanın kullanılıp kullanılmayacağını belirten bir bayrak oluşturur.

start() ve stop()bu sınıftaki iki önemli yöntemdir. Aşağıdaki program, FPSAnimator sınıfını kullanarak bir üçgenin nasıl döndürüleceğini gösterir -

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

Yukarıdaki programı derler ve çalıştırırsanız, aşağıdaki çıktıyı üretir. Burada, renkli üçgenin x ekseni etrafında döndürülmesinin çeşitli anlık görüntülerini gözlemleyebilirsiniz.