1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134
| package Test1;
import com.sun.opengl.util.Animator;
import com.sun.opengl.util.GLUT;
import java.awt.Dimension;
import java.awt.Frame;
import java.awt.Insets;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.media.opengl.*;
import javax.media.opengl.glu.*;
import javax.swing.SwingUtilities;
public class TestAPoster extends Frame implements GLEventListener {
private final GLU GLU = new GLU();
private final GLUT GLUT = new GLUT();
private final Dimension CLIENT_MINIMUM_DIMENSION = new Dimension(640, 480);
final float[] CAMERA_POSITION = new float[]{0F, 5F, 15F};
final float[] CAMERA_DIRECTION = new float[]{0F, 0F, 0F};
final float[] SPOT_POSITION = new float[]{0F, 5F, 15F, 1F};
final float[] SPOT_DIRECTION = new float[]{0F, 0F, -1F, 1F};
public TestAPoster() {
// Hardware OpenGl
GLCapabilities glCapabilities = new GLCapabilities();
glCapabilities.setDoubleBuffered(true);
glCapabilities.setHardwareAccelerated(true);
// Canvas JOGL
GLCanvas canvas = new GLCanvas();
canvas.addGLEventListener(this);
canvas.setPreferredSize(CLIENT_MINIMUM_DIMENSION);
add(canvas);
// Fenêtre
setTitle(getClass().getSimpleName());
setLocation(20, 20);
setVisible(true);
final Insets insets = getInsets();
setMinimumSize(new Dimension(CLIENT_MINIMUM_DIMENSION.width + insets.left + insets.right, CLIENT_MINIMUM_DIMENSION.height + insets.top + insets.bottom));
pack();
// Boucle d'affichage
final Animator animator = new Animator(canvas);
addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
new Thread(new Runnable() {
@Override
public void run() {
animator.stop();
System.exit(0);
}
}).start();
}
});
// Et c'est parti ...
animator.start();
}
@Override
public void init(GLAutoDrawable _glDrawable) {
}
@Override
public void display(GLAutoDrawable _glDrawable) {
final GL gl = _glDrawable.getGL();
gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);
GLUT.glutSolidTeapot(3);
}
@Override
public void reshape(GLAutoDrawable _glDrawable, int _x, int _y, int _width, int _height) {
final GL gl = _glDrawable.getGL();
// Couleur de fond et du zbuffer
gl.glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
gl.glClearDepth(1.0f);
// Caméra et projection
gl.glMatrixMode(GL.GL_PROJECTION);
gl.glLoadIdentity();
GLU.gluPerspective(45, (double) ((double) _width / (double) _height), 0.1D, 100D);
GLU.gluLookAt(CAMERA_POSITION[0], CAMERA_POSITION[1], CAMERA_POSITION[2], CAMERA_DIRECTION[0], CAMERA_DIRECTION[1], CAMERA_DIRECTION[2], 0D, 1D, 0D);
// Matrix de vue
gl.glMatrixMode(GL.GL_MODELVIEW);
gl.glLoadIdentity();
// Modèle d'éclairage
gl.glShadeModel(GL.GL_SMOOTH);
//gl.glLightModeli(GL.GL_LIGHT_MODEL_LOCAL_VIEWER, GL.GL_TRUE);
// Lumière ponctiuelle
gl.glLightfv(GL.GL_LIGHT0, GL.GL_POSITION, SPOT_POSITION, 0);
gl.glLightfv(GL.GL_LIGHT0, GL.GL_SPOT_DIRECTION, SPOT_DIRECTION, 0);
gl.glLightf(GL.GL_LIGHT0, gl.GL_SPOT_CUTOFF, 60F);
gl.glLightf(GL.GL_LIGHT0, GL.GL_SPOT_EXPONENT, 3.0F);
gl.glLightfv(GL.GL_LIGHT0, GL.GL_AMBIENT, new float[]{0.2F, 0.2F, 0.2F, 1F}, 0);
gl.glLightfv(GL.GL_LIGHT0, GL.GL_DIFFUSE, new float[]{1F, 0F, 0F, 1F}, 0);
gl.glLightfv(GL.GL_LIGHT0, GL.GL_SPECULAR, new float[]{1F, 1F, 1F, 1F}, 0);
// Matériau de l'objet
gl.glMaterialfv(GL.GL_FRONT, GL.GL_AMBIENT, new float[]{0.2F, 0.2F, 0.2F, 1F}, 0);
gl.glMaterialfv(GL.GL_FRONT, GL.GL_DIFFUSE, new float[]{1F, 0F, 0F, 1F}, 0);
gl.glMaterialfv(GL.GL_FRONT, GL.GL_SPECULAR, new float[]{1F, 1F, 1F, 1F}, 0);
gl.glMaterialfv(GL.GL_FRONT, GL.GL_SHININESS, new float[]{30F}, 0);
// Etats
gl.glEnable(GL.GL_DEPTH_TEST);
gl.glEnable(GL.GL_LIGHTING);
gl.glEnable(GL.GL_LIGHT0);
}
@Override
public void displayChanged(GLAutoDrawable _glDrawable, boolean _modeChanged, boolean _deviceChanged) {
}
public static void main(String[] _args) {
final TestAPoster test = new TestAPoster();
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
test.setVisible(true);
}
});
}
} |
Partager