2011-04-26 11 views
9

Quiero escribir en el búfer de profundidad OpenGL solo si el píxel actual tiene un alfa> 0.5 ¿cómo hacerlo?Cómo escribir/evitar escribir en el búfer de profundidad OpenGL en GLSL

Si el pixel tiene alpha < 0.5, quiero renderizar el color pero no escribir su profundidad en el búfer de profundidad. El comando discard no es lo que estoy buscando, ya que descarta tanto la información de color como la de profundidad; Solo quiero descartar la información de profundidad.

Existe la variable gl_FragDepth que se puede establecer, pero ¿a qué valor? Y para el caso alpha < 0.5, cómo dejar gl_FragDepth sin cambios?

¿Debo usar FBO para esto o debería funcionar también? El proyecto que estoy trabajando, es un proyecto Android 2.0 GLES

+1

No creo que pueda hacer esto en una sola pasada, al menos no directamente y no de manera eficiente. Por supuesto, puede establecer gl_FragDepth en un valor que hará que la prueba de profundidad falle (por ejemplo, zfar), pero esto también descartará el color del fragmento. Con dos pases usando diferentes pruebas alfa, esto debería funcionar ... pero en ES probablemente no puedas pagar otro pase como este. – Damon

Respuesta

15

he resuelto el problema para mí utilizando

glDepthMask(false) 

Este comando deshabilita la escritura a la memoria intermedia de profundidad, pero todavía se realiza profundidad- pruebas. Simplemente he renderizado mis objetos transparentes después de todos los demás objetos y obtuve exactamente el resultado que estaba buscando.

+0

¡Exactamente lo que estaba buscando también! ¡Gracias! – Dan

Cuestiones relacionadas