Animazione

Scacchiera

La struttura di questa applicazione è simile al triangolo, ma è ora presente una semplice animazione: il rombo rosso si sposta verso destra alla pressione del tasto Start. La classe FPSAnimator viene utilizzata per realizzare l’animazione; il costruttore necessita di 3 parametri:

FPSAnimator(GLAutoDrawable drawable, int fps, boolean scheduleAtFixedRate)
Creates an FPSAnimator with a given target frames-per-second value, an initial drawable to animate, and a flag indicating whether to use fixed-rate scheduling.

Main.java

    GLWindow window;
    FPSAnimator animator;
    GLRenderer renderer;

    public Main() {
        initComponents();

        window = GLWindow.create(new GLCapabilities(GLProfile.getDefault()));
        window.setTitle("OpenGL prova - GLWindow");
        window.setSize(800, 600);
        renderer = new GLRenderer();
        window.addGLEventListener(renderer);
        animator = new FPSAnimator(window, 60, true);
    }
    private void btnHideActionPerformed(java.awt.event.ActionEvent evt) {                                        
        window.setVisible(false);
    }                                       

    private void btnShowActionPerformed(java.awt.event.ActionEvent evt) {                                        
        window.setVisible(true);
    }                                       

    private void btnStartActionPerformed(java.awt.event.ActionEvent evt) {                                         
        animator.start();
    }                                        

    private void btnStopActionPerformed(java.awt.event.ActionEvent evt) {                                        
        animator.stop();
    }                                       

    private void btnFullscreenActionPerformed(java.awt.event.ActionEvent evt) {                                              
        window.setFullscreen(btnFullscreen.isSelected());
    }

GLRenderer.java

    double a = 0.0;    // posizione iniziale del rombo

    @Override
    public void display(GLAutoDrawable drawable) {
        GL2 gl = drawable.getGL().getGL2();

        gl.glClear(GL2.GL_COLOR_BUFFER_BIT);

        gl.glBegin(GL2.GL_QUADS);

        // disegna i quadrati bianchi della scacchiera
        gl.glColor3f(1, 1, 1);
        for (int i = -4; i < 4; i++) {
            for (int j = -4; j < 4; j++) {
                if ((i + j) % 2 != 0) {
                    gl.glVertex2d(i / 4.0, j / 4.0);
                    gl.glVertex2d(i / 4.0 + 0.25, j / 4.0);
                    gl.glVertex2d(i / 4.0 + 0.25, j / 4.0 + 0.25);
                    gl.glVertex2d(i / 4.0, j / 4.0 + 0.25);
                }
            }
        }

        // disegna il rombo rosso
        gl.glColor3f(1, 0, 0);
        gl.glVertex2d(a - 0.1, 0.875);
        gl.glVertex2d(a, 0.875 - 0.1);
        gl.glVertex2d(a + 0.1, 0.875);
        gl.glVertex2d(a, 0.875 + 0.1);

        gl.glEnd();

        a += 0.01;    // incrementa l'ascissa del rombo
    }