Foros - Stratos

Programadores => Programación gráfica => Mensaje iniciado por: misscelan en 18 de Diciembre de 2007, 04:21:02 PM

Título: Reemplazar el depth buffer
Publicado por: misscelan en 18 de Diciembre de 2007, 04:21:02 PM
Buenas,

Sabéis si en opengl se puede almacenar el detph buffer en un determinado momento y restrablecerlo por completo más tarde?.

Sé que se puede alamacenar en un fbo o una textura a secas pero traerlo de vuelta?

El problema es que por ejemplo, cuando quiero pintar la escena desde la posición de la luz dentro de un fbo hago esto:

LimpioElDepthBuffer.
PintoElEscenario.
PintoLosModelos.

No quiero que la luz se mueva, y ningún elemento del escenario tampoco lo hace. Los modelos sí. El caso es que las dos primeras líneas hacen los mismo en cada framerate. Para el escenario puedo dejarlo todo recalculado para enviarlo con un gldrawarrays y no sería mucho problema, pero sólo limpiar el depthbuffer dentro del fbo me hace pasar de 41 fps a 22!!??.

Alguna idea??

Muchas gracias y un saludo.
Título: Reemplazar el depth buffer
Publicado por: tamat en 18 de Diciembre de 2007, 04:59:15 PM
Como tu bien dices, usa FBO. Renderizas el escenario usando dos RenderTextures, uno para el color y otro para el Z, así tendras un ColorBuffer y un ZBuffer.

Crea una copia de cada textura, esto es necesario ya que no quieres bindear ese color y ese zmap directamente o tras el primer frame cambiaran y ya no seran el color y el Z inicial.

Para hacer una copia basta con hacer otro RenderTexture pintando un quad a pantalla completa con la textura que quieras replicar.

Y cuando vayas a pintar la escena attachas las copias del color y el Z como ColorBuffer y DepthBuffer.

Eso es todo.
Título: Reemplazar el depth buffer
Publicado por: misscelan en 18 de Diciembre de 2007, 05:19:54 PM
eii, parece buena idea!!!

Voy a probarlo, muchas gracias!.

Un saludo.