Jogl-rotation

提供:Dev Guides
移動先:案内検索

JOGL-回転

この章では、JOGLを使用してオブジェクトを回転させる方法を説明しました。 オブジェクトの回転は、 GLMatrixFunc インターフェイスの* glRotatef(float angle、float x、float y、float z)*メソッドを使用して、3つの軸のいずれかに沿って行うことができます。 このメソッドのパラメーターとして回転角とx、y、z軸を渡す必要があります。

次の手順は、オブジェクトを正常に回転させるためのガイドです-

  • * gl.glClear(GL2.GL_COLOR_BUFFER_BIT | GL2.GL_DEPTH_BUFFER_BIT)*メソッドを使用して、最初にカラーバッファーと深度バッファーをクリアします。 このメソッドは、オブジェクトの以前の状態を消去し、ビューを明確にします。
  • * glLoadIdentity()*メソッドを使用して投影行列をリセットします。

アニメータークラスをインスタンス化し、* start()*メソッドを使用してアニメーターを開始します。

FPSAnimatorクラス

以下に、FPSAnimatorクラスのさまざまなコンストラクターを示します。

Sr.No. Methods and Descriptions
1

FPSAnimator(GLAutoDrawable drawable, int fps)

指定された1秒あたりのターゲットフレーム値とアニメーション化する初期ドローアブルでFPSAnimatorを作成します。

2

FPSAnimator(GLAutoDrawable drawable, int fps, boolean cheduleAtFixedRate)

与えられた1秒あたりのターゲットフレーム値、アニメーション化する初期ドロアブル、および固定レートスケジューリングを使用するかどうかを示すフラグを使用して、FPSAnimatorを作成します。

3

FPSAnimator(int fps)

指定されたターゲットフレーム/秒値でFPSAnimatorを作成します。

4 It creates an FPSAnimator with a given target frames-per-second value and a flag indicating whether to use fixed rate scheduling.

特定の1秒あたりのターゲットフレーム値と固定レートスケジューリングを使用するかどうかを示すフラグを使用して、FPSAnimatorを作成します。

  • start()および stop()*は、このクラスの2つの重要なメソッドです。 次のプログラムは、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軸を中心に色付きの三角形を回転させるさまざまなスナップショットを見ることができます。

三角形の回転