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
| import javax.media.opengl.GL;
import javax.media.opengl.GL2;
import javax.media.opengl.GLAutoDrawable;
import javax.media.opengl.GLCapabilities;
import javax.media.opengl.GLEventListener;
import javax.media.opengl.GLProfile;
import javax.media.opengl.awt.GLCanvas;
import javax.media.opengl.glu.GLU;
import javax.swing.JFrame;
public class Test extends JFrame implements GLEventListener {
public static void main(String[] args) {
new Test().run();
}
/*
* Affiche la JFrame
*/
public void run() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(600, 300);
setLocationRelativeTo(null);
setVisible(true);
}
/*
* La fenêtre contenant le GLCanvas
*/
public Test() {
super("MultiSampling Test");
GLCapabilities caps = new GLCapabilities(GLProfile.getDefault());
caps.setSampleBuffers(true); // Active le multisampling
caps.setNumSamples(8); // Active le multisampling
GLCanvas canvas = new GLCanvas(caps);
canvas.addGLEventListener(this);
add(canvas);
}
/*
* Initialise la figure à afficher
*
*/
public void init(GLAutoDrawable drawable) {
GL2 gl = drawable.getGL().getGL2();
//
int buf[] = new int[1];
int sbuf[] = new int[1];
gl.glClearColor(1f, 1f, 1f, 1f);
gl.glGetIntegerv(GL.GL_SAMPLE_BUFFERS, buf, 0);
System.out.println("number of sample buffers is " + buf[0]);
gl.glGetIntegerv(GL.GL_SAMPLES, sbuf, 0);
System.out.println("number of samples is " + sbuf[0]);
gl.glNewList(1, GL2.GL_COMPILE);
for (int i = 0; i < 19; i++) {
gl.glColor3f(0f, 0f, 0f);
gl.glPushMatrix();
gl.glRotatef(360.0f * (float) i / 19.0f, 0.0f, 0.0f, 1.0f);
gl.glBegin(GL.GL_LINES);
gl.glVertex2f(0.25f, 0.05f);
gl.glVertex2f(0.9f, 0.2f);
gl.glEnd();
gl.glPopMatrix();
}
gl.glEndList();
}
/*
* Affiche deux figures
*
*/
public void display(GLAutoDrawable drawable) {
GL2 gl = drawable.getGL().getGL2();
gl.glClear(GL.GL_COLOR_BUFFER_BIT);
gl.glEnable(GL.GL_MULTISAMPLE); // première figure lissé
gl.glPushMatrix();
gl.glTranslatef(-1.0f, 0.0f, 0.0f);
gl.glCallList(1);
gl.glPopMatrix();
gl.glDisable(GL.GL_MULTISAMPLE); // seconde figure sans traitement
gl.glPushMatrix();
gl.glTranslatef(1.0f, 0.0f, 0.0f);
gl.glCallList(1);
gl.glPopMatrix();
gl.glFlush();
}
/*
* Au cas où la fenêtre est redimensionnée
*
*/
public void reshape(GLAutoDrawable drawable, int x, int y, int w, int h) {
GL2 gl = drawable.getGL().getGL2();
GLU glu = new GLU();
//
gl.glViewport(0, 0, w, h);
gl.glMatrixMode(GL2.GL_PROJECTION);
gl.glLoadIdentity();
if (w <= (2 * h))
glu.gluOrtho2D(-2.0, 2.0, //
-2.0 * (float) h / (float) w, 2.0 * (float) h / (float) w);
else
glu.gluOrtho2D(-2.0 * (float) w / (float) h, //
2.0 * (float) w / (float) h, -2.0, 2.0);
gl.glMatrixMode(GL2.GL_MODELVIEW);
gl.glLoadIdentity();
}
@Override
public void dispose(GLAutoDrawable drawable) {
}
} |
Partager