- JOGL 圖形形狀
- JOGL - 繪製基礎
- JOGL - 使用 GL_Lines 繪製
- JOGL - 預定義形狀
- JOGL 3D 圖形
- JOGL - 3D 基礎
- JOGL - 3D 三角形
- JOGL - 3D 立方體
- JOGL - 附錄
- JOGL 有用資源
- JOGL - 快速指南
- JOGL - 有用資源
- JOGL - 討論
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 類的各種建構函式。
| 序號 | 方法和描述 |
|---|---|
| 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 軸旋轉的各種快照。
廣告