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