JOGL - Rotation
Dans ce chapitre, nous vous avons expliqué comment faire pivoter un objet à l'aide de JOGL. La rotation des objets peut être effectuée le long de l'un des trois axes, en utilisant leglRotatef(float angle, float x, float y, float z) méthode de GLMatrixFuncinterface. Vous devez passer un angle de rotation et les axes x, y, z comme paramètres de cette méthode.
Les étapes suivantes vous guident pour faire pivoter un objet avec succès -
Effacez le tampon de couleur et le tampon de profondeur initialement en utilisant gl.glClear(GL2.GL_COLOR_BUFFER_BIT | GL2.GL_DEPTH_BUFFER_BIT)méthode. Cette méthode efface l'état précédent de l'objet et rend la vue claire.
Réinitialisez la matrice de projection à l'aide du glLoadIdentity() méthode.
Instanciez la classe d'animateur et démarrez l'animateur à l'aide du start() méthode.
Classe FPSAnimator
Ci-dessous sont donnés les différents constructeurs de la classe FPSAnimator.
N ° Sr. | Méthodes et descriptions |
---|---|
1 | FPSAnimator(GLAutoDrawable drawable, int fps) Il crée un FPSAnimator avec une valeur cible d'images par seconde donnée et un dessin initial à animer. |
2 | FPSAnimator(GLAutoDrawable drawable, int fps, boolean cheduleAtFixedRate) Il crée un FPSAnimator avec une valeur cible d'images par seconde donnée, un dessin initial à animer et un indicateur indiquant s'il faut utiliser la planification à débit fixe. |
3 | FPSAnimator(int fps) Il crée un FPSAnimator avec une valeur cible d'images par seconde donnée. |
4 | Il crée un FPSAnimator avec une valeur de trames par seconde cible donnée et un indicateur indiquant s'il faut utiliser la planification à débit fixe. |
Il crée un FPSAnimator avec une valeur de trames par seconde cible donnée et un indicateur indiquant s'il faut utiliser la planification à débit fixe.
start() et stop()sont les deux méthodes importantes de cette classe. Le programme suivant montre comment faire pivoter un triangle à l'aide de 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
Si vous compilez et exécutez le programme ci-dessus, il génère la sortie suivante. Ici, vous pouvez observer divers instantanés d'une rotation du triangle coloré autour de l'axe des x.
