Files
L-System/src/lsystem/screen/Jogl.java
2021-03-02 18:36:05 +01:00

117 lines
3.4 KiB
Java

package lsystem.screen;
import com.jogamp.opengl.GL;
import com.jogamp.opengl.GL2;
import com.jogamp.opengl.GLAutoDrawable;
import com.jogamp.opengl.GLEventListener;
import com.jogamp.opengl.awt.GLCanvas;
import com.jogamp.opengl.util.Animator;
import lsystem.screen.listener.JoglEventListener2D;
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
/**
* Article1.java author: InfoRital
*
* Code source du premier article. Article1 implémente {@link GLEventListener}
* pour obtenir le mécanisme de callback
*
*/
public class Jogl implements GLEventListener {
public static void initialize(String[] args) {
// Création de la fenêtre
Frame frame = new Frame("L-système 3D");
// Création du canvas pour dessiner dessus
GLCanvas canvas = new GLCanvas();
// Nous attachons ensuite le méchanisme de callback à notre surface dessinable
canvas.addGLEventListener((GLEventListener) new Jogl());
// dessin -> fenêtre
frame.add(canvas);
// Création de l'animator
final Animator animator = new Animator(canvas);
// croix rouge = fermeture de la fenêtre
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
// Thread pour arrêter l'animator avant la fenêtre
new Thread(animator::stop).start();
}
});
// Taille de la fenêtre
frame.setSize(800, 800);
frame.setVisible(true);
// Démarrage de l'animator qui va se charger de faire des appels à la méthode
animator.start();
}
// init() sera appelée une fois au début de l'animation. C'est dans cette méthode
// que nous nous chargerons de toutes les opérations d'initialisation
public void init(GLAutoDrawable drawable) {
// GLEventListener renvoie un contexte (drawable)
// que nous allons utiliser pour instancier un objet de type GL
// qui nous permettra d'utiliser les fonctions OpenGL
GL gl = drawable.getGL();
// désactiver la synchronisation verticale indépendamment de la plateforme utilisée
gl.setSwapInterval(1);
}
// Appelée que si la fenêtre d'affichage est redimensionnée
public void reshape(GLAutoDrawable drawable, int x, int y, int width, int height) {
}
// display() sera appelée en boucle tout au long de l'application par la classe Animator.
// C'est dans cette fonction qu'on fera tout ce qui doit être affiché
public void display(GLAutoDrawable drawable) {
GL2 gl = drawable.getGL().getGL2();
float xDefault = -1.0f, yDefault = -1.0f;
/*gl.glBegin(GL2.GL_LINES);
gl.glVertex2f(xDefault, yDefault);
gl.glVertex2f(xDefault + (0.1f * 1), yDefault + (0.1f * 1));
gl.glEnd();
gl.glBegin(GL2.GL_LINES);
gl.glVertex2f(xDefault + (0.1f * 1), -1.1f);
gl.glVertex2f(xDefault + (0.1f * 1) + (0.2f*1), yDefault + (0.1f * 1) + (0.2f*-1));
gl.glEnd();*/
DrawHelper.drawStick(gl, 0.1f, xDefault, yDefault, 0);
DrawHelper.drawStick(gl, 0.2f, -0.9f, -0.9f, 90);
}
/**
* displayChanged() est appelée si le mode d'affichage par exemple est modifié.
*/
/*
* public void displayChanged(GLAutoDrawable drawable, boolean modeChanged,
* boolean deviceChanged) { }
*/
@Override
public void dispose(GLAutoDrawable arg0) {
// TODO Auto-generated method stub
}
public static void main(String[] args) {
//Jogl jogl = new Jogl();
//jogl.initialize(args);
SwingGLCanvas2D canvas = new SwingGLCanvas2D();
JoglEventListener2D a = new JoglEventListener2D(canvas);
}
}