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.
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)