JOGL - Rotazione
In questo capitolo abbiamo spiegato come ruotare un oggetto usando JOGL. La rotazione degli oggetti può essere eseguita lungo uno qualsiasi dei tre assi, utilizzando ilglRotatef(float angle, float x, float y, float z) metodo di GLMatrixFuncinterfaccia. È necessario passare un angolo di rotazione e gli assi x, y, z come parametri a questo metodo.
I seguenti passaggi ti guidano a ruotare un oggetto con successo:
Cancella il buffer di colore e il buffer di profondità inizialmente utilizzando gl.glClear(GL2.GL_COLOR_BUFFER_BIT | GL2.GL_DEPTH_BUFFER_BIT)metodo. Questo metodo cancella lo stato precedente dell'oggetto e rende chiara la vista.
Reimpostare la matrice di proiezione utilizzando il glLoadIdentity() metodo.
Crea un'istanza della classe animatore e avvia l'animatore utilizzando il file start() metodo.
Classe FPSAnimator
Di seguito sono riportati i vari costruttori della classe FPSAnimator.
Sr.No. | Metodi e descrizioni |
---|---|
1 | FPSAnimator(GLAutoDrawable drawable, int fps) Crea un FPSAnimator con un determinato valore di fotogrammi al secondo di destinazione e un disegnabile iniziale per l'animazione. |
2 | FPSAnimator(GLAutoDrawable drawable, int fps, boolean cheduleAtFixedRate) Crea un FPSAnimator con un determinato valore di fotogrammi al secondo di destinazione, un disegno iniziale da animare e un flag che indica se utilizzare la pianificazione a velocità fissa. |
3 | FPSAnimator(int fps) Crea un FPSAnimator con un determinato valore di frame al secondo di destinazione. |
4 | Crea un FPSAnimator con un determinato valore di frame al secondo di destinazione e un flag che indica se utilizzare la pianificazione a velocità fissa. |
Crea un FPSAnimator con un determinato valore di frame al secondo di destinazione e un flag che indica se utilizzare la pianificazione a velocità fissa.
start() e stop()sono i due metodi importanti in questa classe. Il seguente programma mostra come ruotare un triangolo usando la classe 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
Se compili ed esegui il programma sopra, genera il seguente output. Qui puoi osservare varie istantanee di una rotazione del triangolo colorato attorno all'asse x.