117 lines
3.4 KiB
Java
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);
|
|
}
|
|
|
|
}
|