JOGL - การหมุน

ในบทนี้เราได้อธิบายวิธีการหมุนวัตถุโดยใช้ JOGL การหมุนวัตถุสามารถทำได้ตามแกนสามแกนใดก็ได้โดยใช้glRotatef(float angle, float x, float y, float z) วิธีการของ GLMatrixFuncอินเตอร์เฟซ. คุณต้องส่งมุมการหมุนและแกน x, y, z เป็นพารามิเตอร์สำหรับวิธีนี้

ขั้นตอนต่อไปนี้แนะนำให้คุณหมุนวัตถุได้สำเร็จ -

  • ล้างบัฟเฟอร์สีและบัฟเฟอร์ความลึกในตอนแรกโดยใช้ gl.glClear(GL2.GL_COLOR_BUFFER_BIT | GL2.GL_DEPTH_BUFFER_BIT)วิธี. วิธีนี้จะลบสถานะก่อนหน้าของวัตถุและทำให้มุมมองชัดเจน

  • รีเซ็ตเมทริกซ์การฉายภาพโดยใช้ glLoadIdentity() วิธี.

สร้างอินสแตนซ์คลาสแอนิเมเตอร์และเริ่มแอนิเมเตอร์โดยใช้ไฟล์ start() วิธี.

คลาส FPSAnimator

ด้านล่างนี้เป็นตัวสร้างต่างๆของคลาส FPSAnimator

ซีเนียร์ วิธีการและคำอธิบาย
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 );  
      
      // 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

หากคุณคอมไพล์และรันโปรแกรมข้างต้นโปรแกรมจะสร้างผลลัพธ์ต่อไปนี้ ที่นี่คุณสามารถสังเกตภาพรวมต่างๆของสามเหลี่ยมสีที่หมุนรอบแกน x