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
}
