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.






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.