Bonsoir,
J'ai des problèmes pour arriver à utiliser le Z-Buffer...
Mon problème c'est que pour l'instant c'est l'ordre dans lequel j'ai
ajouté les triangles qui compte
alors que moi je voudrais que ca soit en fonction de la position de
l'observateur... (de la vraie 3D quoi)
Voici mon code :
**********************************************************
importjava.awt.*;
import
java.
awt.
event.*;
import
javax.
swing.*;
import
javax.
media.
opengl.*;
import
javax.
media.
opengl.
glu.
GLU;
//===================================================
public
classTestZBufferextendsJFrameimplements GLEventListener, MouseListener,MouseMotionListener
{
//---------------------------------------------------
static
finallong serialVersionUID =
1L;
static
finalGLU glu =
new GLU();
//---------------------------------------------------
GLCanvas
canvas;
float
theta,phi,zoom;
float
oldX,oldY,oldTheta,oldPhi;
boolean
bMouse;
//---------------------------------------------------
public
TestZBuffer(
String title)
{
super(title);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.bMouse = false;
this.theta = 0.f;
this.phi = 0.f;
this.zoom = 5f;
canvas = new GLCanvas(new GLCapabilities());
canvas.addGLEventListener(this);
canvas.addMouseListener(this);
canvas.addMouseMotionListener(this);
canvas.requestFocus();
this.getContentPane().add(canvas,BorderLayout.CENTER);
this.setSize(500,500);
this.setVisible(true);
} // TestZBuffer()
//---------------------------------------------------
public
staticvoidmain(
String[] args)
{
TestZBuffer frm = new TestZBuffer("Test du Z-Buffer en OpenGL");
frm.setVisible(true);
} // main()
//---------------------------------------------------
public
voidinit(GLAutoDrawable drawable)
{
GL gl;
gl = drawable.getGL();
gl.setSwapInterval(1);
gl.glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
gl.glClearDepth(1.0f);
gl.glEnable(GL.GL_DEPTH_TEST);
gl.glDepthFunc(GL.GL_LEQUAL);
} // init()
public
voidreshape(GLAutoDrawable drawable,
int x,
int y,
int width,
int height)
{
GL gl;
gl = drawable.getGL();
gl.glViewport(0,0,width,height);
gl.glMatrixMode(GL.GL_PROJECTION);
gl.glLoadIdentity();
glu.gluPerspective(45.,(float)width/(float)height,0.,100000.);
} // reshape()
public
voiddisplay(GLAutoDrawable drawable)
{
GL gl;
gl = drawable.getGL();
gl.glMatrixMode(GL.GL_MODELVIEW);
gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);
gl.glLoadIdentity();
glu.gluLookAt(zoom*Math.cos(theta)*Math.cos(phi),zoom*Math.sin(theta)*Math.cos(phi),zoom*Math.sin(phi),0,0,0,Math.cos(theta-Math.PI)*Math.cos(Math.PI/2.-phi),Math.sin(theta-Math.PI)*Math.cos(Math.PI/2.-phi),Math.sin(Math.PI/2.-phi));
gl.glBegin(GL.GL_TRIANGLES);
gl.glColor3f(0f,1f,0f);
gl.glVertex3f(0f,0f,0f);
gl.glVertex3f(1f,0f,0f);
gl.glVertex3f(0f,1f,0f);
gl.glColor3f(1f,0f,0f);
gl.glVertex3f(0f,0f,0.1f);
gl.glVertex3f(1f,0f,0.1f);
gl.glVertex3f(0f,1f,0.1f);
gl.glColor3f(0f,0f,1f);
gl.glVertex3f(0f,0f,0.2f);
gl.glVertex3f(1f,0f,0.2f);
gl.glVertex3f(0f,1f,0.2f);
gl.glEnd();
} // display()
public
voiddisplayChanged(GLAutoDrawable drawable,
boolean modeChanged,
boolean deviceChanged)
{
} // displayChanged()
//---------------------------------------------------
public
voidmouseClicked(
MouseEvent e){}
public
voidmouseReleased(
MouseEvent e)
{
this.bMouse = false;
}
public
voidmouseDragged(
MouseEvent e)
{
if(this.bMouse == false)
{
this.bMouse = true;
oldX = e.getX();
oldY = e.getY();
oldTheta = theta;
oldPhi = phi;
}
theta = oldTheta + 2*3.141592f*(e.getX()-oldX)/((float)this.getWidth());
phi = oldPhi + 2*3.141592f*(e.getY()-oldY)/((float)this.getHeight());
canvas.display();
}
public
voidmousePressed(
MouseEvent e){}
public
voidmouseEntered(
MouseEvent e){}
public
voidmouseExited(
MouseEvent e){}
public
voidmouseMoved(
MouseEvent e){}
//---------------------------------------------------
} // class TestZbuffer
**********************************************************
JCDjcd