2011-04-26 3 views
9

Je veux écrire dans le tampon de profondeur OpenGL seulement si le pixel courant a un alpha> 0.5 comment faire cela?Comment écrire/empêcher l'écriture dans le tampon de profondeur OpenGL dans GLSL

Si le pixel est alpha < 0.5, je veux rendre la couleur mais ne pas écrire sa profondeur dans le tampon de profondeur. La commande discard n'est pas ce que je cherche, car elle supprime à la fois les informations de couleur et de profondeur; Je veux seulement jeter les informations de profondeur. La variable gl_FragDepth peut être définie, mais à quelle valeur? Et pour le cas alpha < 0,5, comment laisser gl_FragDepth inchangé?

Dois-je utiliser des FBO pour cela, ou devrait-il aussi fonctionner sans? Le projet je travaille, est un projet Android 2.0 GLES

+1

Je ne pense pas que vous pouvez le faire en un seul passage, du moins pas directement et pas efficacement. Vous pouvez bien sûr définir gl_FragDepth sur une valeur qui provoquera l'échec du test de profondeur (par exemple zfar), mais cela supprimera également la couleur du fragment. Avec deux passages utilisant un test alpha différent, cela devrait fonctionner ... mais sur ES, vous ne pouvez probablement pas vous permettre un autre passage comme celui-ci. – Damon

Répondre

15

Je l'ai résolu pour moi le problème en utilisant

glDepthMask(false) 

Cette commande désactive l'écriture à la mémoire tampon de profondeur, mais effectue toujours profondeur- essai. J'ai simplement rendu mes objets transparents après tous les autres objets et j'ai obtenu exactement le résultat que je recherchais.

+0

Exactement ce que je cherchais aussi! Merci! – Dan

Questions connexes