JOGL - 旋转

在本章中,我们向您解释了如何使用 JOGL 旋转对象。可以使用 GLMatrixFunc 接口的 glRotatef(float angle, float x, float y, float z) 方法沿三个轴中的任意一个旋转对象。您需要将旋转角度和 x、y、z 轴作为参数传递给此方法。

以下步骤将指导您成功旋转对象 −

  • 首先使用 gl.glClear(GL2.GL_COLOR_BUFFER_BIT | GL2.GL_DEPTH_BUFFER_BIT) 方法清除颜色缓冲区和深度缓冲区。此方法会清除对象的先前状态并使视图清晰。

  • 使用 glLoadIdentity() 方法重置投影矩阵。

实例化动画器类并使用 start() 方法启动动画器。

FPSAnimator 类

下面给出了 FPSAnimator 类的各种构造函数。

Sr.No. 方法和说明
1

FPSAnimator(GLAutoDrawable drawable, int fps)

它使用给定目标创建一个 FPSAnimator每秒帧数值和一个初始可绘制动画。

2

FPSAnimator(GLAutoDrawable drawable, int fps, boolean cheduleAtFixedRate)

它创建一个具有给定目标每秒帧数值的 FPSAnimator、一个初始可绘制动画以及一个指示是否使用固定速率调度的标志。

3

FPSAnimator(int fps)

它创建一个具有给定目标每秒帧数值的 FPSAnimator。

4 它创建一个具有给定目标每秒帧数值的 FPSAnimator 和一个标志,指示是否使用固定速率调度。

它创建一个具有给定目标每秒帧数值和一个标志的 FPSAnimator,指示是否使用固定速率调度。

start()stop() 是此类中的两个重要方法。以下程序显示了如何使用 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 );  
      
      // 清除屏幕和深度缓冲区
      gl.glLoadIdentity(); // 重置视图
    
      //三角形旋转
      gl.glRotatef( rtri, 0.0f, 1.0f, 0.0f );
    
      // 使用三角形绘图
      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 ) { 
      // 方法主体 
   }
   
   @Override 
   public void reshape( GLAutoDrawable drawable, int x, int y, int width, int height ) { 
   
      public static void main( String[] args ) {
		
        //获取 GL2 配置文件的功能对象
        final GLProfile profile = GLProfile.get(GLProfile.GL2 );
        GLCapabilities capabilities = new GLCapabilities( profile );
        
        // 画布
        final GLCanvas glcanvas = new GLCanvas( capabilities);
        TriangleRotation triple = new TriangleRotation();
        glcanvas.addGLEventListener( triple );
        glcanvas.setSize( 400, 400 );
        
        // 创建框架
        final JFrame frame = new JFrame ("Rotating Triangle");
        
        // 向其中添加画布
        frame.getContentPane().add( glcanvas );
        frame.setSize(frame.getContentPane() .getPreferredSize());
        frame.setVisible( true );
        
        //实例化并启动动画器
        final FPSAnimator animator = new FPSAnimator(glcanvas, 300,true);
        animator.start(); 
      }
		
   } //end of main
	
} //end of class 

如果您编译并执行上述程序,它将生成以下输出。在这里,您可以观察到围绕 x 轴旋转彩色三角形的各种快照。

三角形旋转