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
| import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.media.opengl.GL;
import javax.media.opengl.GLAutoDrawable;
import javax.media.opengl.GLCanvas;
import javax.media.opengl.GLEventListener;
import javax.media.opengl.glu.GLU;
import javax.media.opengl.GLCapabilities;
import com.sun.opengl.util.GLUT;
public class TetraedreSierpinski3D extends GLCanvas implements GLEventListener, KeyListener{
TetraedreSierpinski tetra;
double base, hauteur;
int rang;
double cameraX, cameraY, cameraZ;
public TetraedreSierpinski3D(double base, double hauteur, int rang){
super(new GLCapabilities());
cameraX = base/2;
cameraY = base;
cameraZ = hauteur/2;
addGLEventListener(this);
addKeyListener(this);
setSize(800, 600);
setPreferredSize(getSize());
tetra = new TetraedreSierpinski(base, hauteur, rang);
this.base = base;
this.hauteur = hauteur;
this.rang = rang;
}
public void display(GLAutoDrawable drawable){
GL gl = drawable.getGL();
gl.glMatrixMode(GL.GL_MODELVIEW);
gl.glEnable(GL.GL_DEPTH_TEST);
gl.glDepthMask(true);
gl.glClear(GL.GL_DEPTH_BUFFER_BIT);
gl.glLoadIdentity();
GLU glu = new GLU();
glu.gluPerspective(80, 1, 1, 1000);
glu.gluLookAt(cameraX, cameraY, cameraZ, base/2, Math.sin(60)*base/2, hauteur/2, 0, 0, 1);
while(!tetra.estVide()){
Polygone poly = tetra.depiler();
gl.glBegin(GL.GL_TRIANGLE_FAN);
for(int i = 0; i < poly.index.length; i++){
gl.glColor3d(1.0, 0.0, 0.0);
if (i == 1) gl.glColor3d(0.0, 0.5, 0.5);
if (i == 2) gl.glColor3d(0.5, 0.5, 0.0);
if (i == 3) gl.glColor3d(0.0, 1.0, 0.0);
if (i == 4) gl.glColor3d(0.0, 0.0, 1.0);
gl.glVertex3d(poly.sommets[poly.index[i]].X(), poly.sommets[poly.index[i]].Y(), poly.sommets[poly.index[i]].Z());
}
gl.glEnd();
gl.glBegin(GL.GL_TRIANGLE_FAN);
gl.glColor3d(0.5, 0.5, 0.5);
for(int i = 0; i < poly.sommets.length-1; i++){
gl.glVertex3d(poly.sommets[i].X(), poly.sommets[i].Y(), poly.sommets[i].Z());
}
gl.glEnd();
}
gl.glFlush();
swapBuffers();
}
public void displayChanged(GLAutoDrawable drawable, boolean modeChanged, boolean deviceChanged){
}
public void init(GLAutoDrawable drawable){
GL gl=drawable.getGL();
gl.glEnable(GL.GL_COLOR);
}
public void reshape(GLAutoDrawable drawable, int x, int y, int width, int height){
GLU glu = new GLU();
glu.gluPerspective(80, 1, 1, 1000);
glu.gluLookAt(cameraX, cameraY, cameraZ, base/2, Math.sin(60)*base/2, hauteur/2, 0, 0, 1);
}
@Override
public void keyPressed(KeyEvent e) {
// TODO Auto-generated method stub
}
@Override
public void keyReleased(KeyEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void keyTyped(KeyEvent arg0) {
// TODO Auto-generated method stub
}
} |
Partager