Poligoni

OpenGLProva

Iniziamo creando un’applicazione visuale, che serva da controllo della finestra di rendering, con i pulsanti Show, Hide, Fullscreen, Start, Stop: tutti i progetti che svilupperemo faranno sempre uso di una finestra di controllo simile a questa.

Main

Ricordandoci di aggiungere al progetto la libreria JOGL2, scriviamo le seguenti linee di codice e i gestori di evento associati ai 5 pulsanti; il listato dovrebbe essere simile al seguente:

Main.java

public class Main extends javax.swing.JFrame {

    GLWindow window;
    FPSAnimator animator;
    GLRenderer renderer;

    public Main() {
        [...]    // crea la JFrame e i bottoni

        window = GLWindow.create(new GLCapabilities(GLProfile.getDefault()));   // crea la finestra di rendering
        window.setTitle("OpenGL prova - GLWindow");   // imposta il titolo
        window.setSize(800, 600);                     // imposta la dimensione
        renderer = new GLRenderer();                  // istanzia la classe GLRenderer
        window.addGLEventListener(renderer);          // passa all'ascolatore di eventi l'oggetto renderer
        animator = new FPSAnimator(window, 60, true); // istanzia la classe FPSAnimator, 60 è la frequenza di rendering
    }

 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());
 }

Il disegno che si vuole realizzare viene definito all’interno del metodo display della classe GLRenderer che implementa l’interfaccia GLEventListener. Nel nostro esempio disegniamo il triangolo con i tre vertici colorati con i 3 colori primari; il listato è riportato di seguito.

GLRenderer.java

public class GLRenderer implements GLEventListener {

    @Override
    public void init(GLAutoDrawable drawable) { }

    @Override
    public void dispose(GLAutoDrawable drawable) { }

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

        gl.glClear(GL.GL_COLOR_BUFFER_BIT);   // cancella la finestra

        gl.glBegin(GL.GL_TRIANGLES);
        gl.glColor3f(1, 0, 0);   // il 1° vertice è rosso
        gl.glVertex2d(-1, 0);
        gl.glColor3f(0, 1, 0);   // il 2° vertice è verde
        gl.glVertex2d(1, 0);
        gl.glColor3f(0, 0, 1);   // il 3° vertice è blu
        gl.glVertex2d(0, 1);
        gl.glEnd();
    }

    @Override
    public void reshape(GLAutoDrawable drawable, int x, int y, int width, int height) { }

}

Progetto Eclipse: Esempio2D.zip
(controllare nelle Referenced Libraries che i percorsi dei file gluegen-rt.jar e jogl-all.jar siano corretti)