Quiero utilizar oclusion query para saber si tengo que dibujar algo o no. Mi duda viene en la forma de utilizarlo:
Para todos los objetos
1. Renderizo el Bounding Box del objeto sólo afectando a Z.
2. Si el valor de oclusion query es 0, signfica que no se ve y no lo dibujo
3. Si no es 0, dibujo el objeto
El problema es que si se ve, al dibujar un rectángulo, estoy poniendo valores en la Z que no tienen que estar. ¿Conoceis alguna forma de evitar esto? No vale no escribir en el Z, porque entonces oclusion query siempre devuelve 0.
Lo primero que se me ocurre es deshabilitar la escritura en el z-buffer cuando pintas el bounding box para el occlusion query. De esta forma al pintarlo, utilizaría la información del z-buffer, pero nunca escribiría en él.
No veo porque el occlusion query tiene que devolver 0 deshabilitando el zbuffer. Al menos en el occlusion query de opengl parece que aunmenta el contador por cada fragmento que hay pasado el depth buffer. Por lo tanto, aunque tengas la escritura en zbuffer deshabilitada (que no zbuffer deshabilitado) debería funcionar.
Puede que el fallo esté en otra parte.
glDepthMask(GL_FALSE)
De esta manera testea el z buffer pero no lo modifica cuando el test da que debe pintar el pixel
Aqui tienes una demo de occlussion culling via hardware, aunque es OpenGL+Delphi. Espero que te sirva.
http://www.delphi3d.net/download/occlusionengine.zip
Quizás esté equivocado y no sea necesario grabar en el ZBuffer. Repasaré el código que tengo de colisión de sprites. B)
Cierto, era un error mio. Sólo es necesario activar el ZBuffer no es necesario activar la escritura. Así está muy muy claro, no hay problema (ole)
Gracias a todos