Pb de Z-buffer ac openGL -> Help!

Signaler
Messages postés
1329
Date d'inscription
vendredi 15 août 2003
Statut
Membre
Dernière intervention
16 juin 2010
-
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
-
bonjour tt le monde!
quelqun pourrait me dire pourqoui le Z-buffer marche pas?
pasque le dernier (4ème) triangle dessiné apparait tjs au dessus, meme s'il devrait etre derrière dans l'espace.

bon, voilà le code, il faut juste rajouter -lopenGL32 -lglut32 ds project options, mais je suppose que si qqun peut repondre a ma question, il saura aussi comment compiler un projet openGL

Au fait, j'ai Dev C++

Merci d'avance

PS:je sais, ya pas + con comme prog, mais bon faut bien commencer par quelque part :blush)

// affiche 4 faces d'un pavé de 2*2*3, et permet de tourner autour.

// ou du moins, ca devrait.

#include <GL/glut.h>
#include <stdlib.h>

float a=0.0,b=0.0;

void processSpecialKeys(int key,int x,int y){
switch(key){
case GLUT_KEY_RIGHT :
a=a-1; break;
case GLUT_KEY_LEFT :
a=a+1; break;
case GLUT_KEY_UP :
b=b-1; break;
case GLUT_KEY_DOWN :
b=b+1; break;
}
}

void display(void) {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
gluLookAt(0, 0, 6, 0, 0, 0, 0, 1, 0);
glRotatef(a,0,1,0);
glRotatef(b,1,0,0);
glBegin(GL_QUADS);

glColor3f(1.0, 1.0, 1.0);
glVertex3i(-1,0,1);
glVertex3i(1,0,1);
glVertex3i(1,3,1);
glVertex3i(-1,3,1);
glColor3f(0.0, 0.0, 1.0);
glVertex3i(1,0,-1);
glVertex3i(1,3,-1);
glVertex3i(-1,3,-1);
glVertex3i(-1,0,-1);
glColor3f(0.0, 1.0, 0.0);
glVertex3i(1,0,1);
glVertex3i(1,0,-1);
glVertex3i(1,3,-1);
glVertex3i(1,3,1);
glColor3f(0.0, 1.0, 1.0);
glVertex3i(-1,0,1);
glVertex3i(-1,0,-1);
glVertex3i(-1,3,-1);
glVertex3i(-1,3,1);
glEnd();

glutSwapBuffers();
glutPostRedisplay();
}

void init(void) {
glClearColor (0.0, 0.0, 0.0, 0.0);
glShadeModel (GL_SMOOTH);
}

void reshape(int w, int h) {
glViewport(0,0,w,h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(45.0f,(GLfloat)w/(GLfloat)h, 1 ,150.0f);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}

int main(int argc, char** argv) {
glutInit(&argc, argv);
glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB);
glutInitWindowSize (250, 250);
glutInitWindowPosition (100, 100);
glutCreateWindow (argv[0]);
init ();
glutDisplayFunc(display);
glutIdleFunc(display);
glutReshapeFunc(reshape);
glutSpecialFunc(processSpecialKeys);

glutMainLoop();
return 0;
}

6 réponses

Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
rajoute glEnable(GL_DEPTH_TEST); dans ta fonction init(il me semble pas l'avoir vu dans ton code)
Messages postés
2835
Date d'inscription
lundi 11 août 2003
Statut
Modérateur
Dernière intervention
16 décembre 2006
10
:big) Neodante :big)

Avec un rajout dans glutInitDisplayMode de GLUT_DEPTH ce serais pas mal histoire d'allouer un peu d'espace mémoire pour le tampon de profondeur ! ;-)
Effectivement il manque aussi le glEnable() de djl !
@+
Messages postés
2835
Date d'inscription
lundi 11 août 2003
Statut
Modérateur
Dernière intervention
16 décembre 2006
10
:big) Neodante :big)

pour plus d'info sur l'utilisation de la GLUT :
http://www.neogamedev.com/index.php?PageID=2001
je me suis pas embêter à écrire tout ça pour rien !!! ;-)
@+
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
glut ca a l'air pas mal, a part la portabilité, c koa l'avantage?
Messages postés
2835
Date d'inscription
lundi 11 août 2003
Statut
Modérateur
Dernière intervention
16 décembre 2006
10
:big) Neodante :big)

C'est que c'est tout fait : ouvrir une fenêtre compatible OGL, gestion des entrées, timer, ... mais je te conseille de l'utiliser que pour tes programmes de démonstration car rien ne vaut une implémentation maison et native pour de meilleures performances !
@+
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
oui je vois, mais de ce coté je m'embete pas , j'utilise toujours le meme squelette win32