Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Problema Con Z-buffer

Iniciado por durden, 16 de Octubre de 2005, 06:05:20 PM

« anterior - próximo »

durden

 Hola a todos,

estoy haciendo un programilla en C++ utilizando opengl que pinta un trozo de terreno generado aleatoriamente (un heightmap) y un skybox. Es como el típico programa de ejemplo que te puedes encontrar en un tutorial de generación de terreno. Para usar el Z-buffer hago lo siguiente:

- En la inicialización de la ventana (yo uso glut) hago esto:

       glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH);

- En la inicialización de la escena (solo se ejecuta una vez al inicio del programa):

       glClearDepth(1.0f);
       glDepthFunc(GL_LEQUAL);

       glClearColor(0.0f, 0.0f, 0.0f, 0.0f);

- La función que pinta la escena hace esto:

       /** Se configura la perspectiva y la camara */
   glMatrixMode(GL_PROJECTION);
   glLoadIdentity();
   gluPerspective(90.0f, 1.5, 0.0, 300.0f);

   glMatrixMode(GL_MODELVIEW);
   glLoadIdentity();

   /** Se actualiza la posicion de la camara */
   camera.updateLook();
   camera.getPos(camera_pos);
   camera.checkCollision(map.getScaledHeight((int)camera_pos[0], (int)camera_pos[2]), map.getSize());   

   /** Se dibuja la escena */      
   glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
   map.render();      
   sky.render();    // Primero el heightmap y luego el skybox


   glFlush();
   glutSwapBuffers();

Como se puede ver en el código, se pinta primero el heightmap y luego el skybox. Con el uso del z-buffer esto debería dar igual y tendría que salir el heightmap bien dibujado y sin embargo pasa una cosa muy rara: se ven algunos píxeles del heightmap pero otros no, es como si para algunos píxeles no se estuviera haciendo correctamente el test del z-buffer. ¿Como es esto posible?. Agradecería algo de ayuda porque estoy un poco desconcertado. Gracias por adelantado.

janio

El parametro znear de gluPerpective debe ser mayor que cero, y mientras mayor sea obtienes mejor precision en zbuffer. Recomendaria un valor entorno a 4 (si no recuerdo mal, es el que usa el quake2)

durden

 Vale eso era, muuchas gracias.