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 클래스의 다양한 생성자가 있습니다.

Sr. 아니. 방법 및 설명
1

FPSAnimator(GLAutoDrawable drawable, int fps)

지정된 초당 프레임 수 값과 애니메이션을 적용 할 초기 드로어 블을 사용하여 FPSAnimator를 만듭니다.

2

FPSAnimator(GLAutoDrawable drawable, int fps, boolean cheduleAtFixedRate)

지정된 초당 프레임 수 값, 애니메이션을 적용 할 초기 드로어 블 및 고정 속도 스케줄링 사용 여부를 나타내는 플래그를 사용하여 FPSAnimator를 만듭니다.

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 축을 중심으로 색상이 지정된 삼각형이 회전하는 다양한 스냅 샷을 볼 수 있습니다.