// ANIMACION USANDO EL DOBLE BUFFER - ADB 1/1 - import javax.swing.*; import java.awt.*; import java.awt.event.*; import javax.media.opengl.*; import javax.media.opengl.glu.*; import com.sun.opengl.util.*; import javax.media.opengl.GLEventListener; public class doublebuf extends JFrame implements GLEventListener, KeyListener, MouseListener { private GLCapabilities caps; private GLCanvas canvas; private FPSAnimator animator; private float spin = 0f , spinDelta = 2f ; public doublebuf () { super ( "doublebuf" ) ; caps = new GLCapabilities () ; caps.setDoubleBuffered ( true ) ; canvas = new GLCanvas ( caps ) ; canvas.addGLEventListener ( this ) ; canvas.addMouseListener ( this ) ; animator = new FPSAnimator ( canvas, 200 ) ; getContentPane () .add ( canvas ) ; } public void run () { setSize ( 512 , 256 ) ; setLocationRelativeTo ( null ) ; setDefaultCloseOperation ( JFrame.EXIT_ON_CLOSE ) ; setVisible ( true ) ; animator.start () ; } public static void main ( String [] args ) { new doublebuf () .run () ; } public void init ( GLAutoDrawable drawable ) { GL gl = drawable.getGL () ; gl.glClearColor ( 0.0f , 0.0f , 0.0f , 0.0f ) ; gl.glShadeModel ( GL.GL_FLAT ) ; } public void display ( GLAutoDrawable drawable ) { GLUT glut = new GLUT(); GL gl = drawable.getGL () ; gl.glClear ( GL.GL_COLOR_BUFFER_BIT ) ; gl.glPushMatrix () ; System.out.println("Spin= " + spin+ "\tDelta= " + spinDelta); gl.glRotatef ( spin, 0.0f , 0.0f , 1.0f ) ; gl.glColor3f ( 1.0f , 1.0f , 1.0f ) ; glut.glutWireSphere(20d, 30, 30); gl.glPopMatrix () ; gl.glFlush () ; spinDisplay () ; } public void reshape ( GLAutoDrawable drawable, int x, int y, int w, int h ) { GL gl = drawable.getGL () ; gl.glViewport ( 0 , 0 , w, h ) ; gl.glMatrixMode ( GL.GL_PROJECTION ) ; gl.glLoadIdentity () ; gl.glOrtho(-50.0, 50.0, -400.0, 400.0, -10.0, 10.0); gl.glMatrixMode ( GL.GL_MODELVIEW ) ; gl.glLoadIdentity () ; } public void displayChanged ( GLAutoDrawable drawable, boolean modeChanged, boolean deviceChanged ) { } private void spinDisplay () { spin = spin + spinDelta; if ( spin > 360f ) spin = spin - 360 ; } public void keyTyped ( KeyEvent key ) { } public void keyPressed ( KeyEvent key ) { switch ( key.getKeyCode ()) { case KeyEvent.VK_ESCAPE: new Thread () { public void run () { animator.stop () ; } } .start () ; System.exit ( 0 ) ; default : break ; } } public void keyReleased ( KeyEvent key ) { } public void mouseClicked ( MouseEvent key ) { } public void mousePressed ( MouseEvent mouse ) { System.out.println("Rafa..."); switch ( mouse.getButton ()) { case MouseEvent.BUTTON1: spinDelta = 2f ; break ; case MouseEvent.BUTTON2: case MouseEvent.BUTTON3: spinDelta = 0f ; break ; } //System.out.println("Spin= " + spin+ "\tDelta= " + spinDelta); } public void mouseReleased ( MouseEvent mouse ) { } public void mouseEntered ( MouseEvent mouse ) { } public void mouseExited ( MouseEvent mouse ) { } }