Dol*_*000 5 opengl transparency depth-buffer
有没有办法告诉OpenGL不要将完全透明的片段深度写入深度缓冲区?
可以肯定的是,我想渲染的纹理永远不会是半透明的; 它的alpha值只有1.0或0.0,我使用GL_NEAREST过滤器,所以它永远不会插入到它们之间的任何值.
我认为当一个片段的alpha值为0.0时,OpenGL能够简单地不写入深度缓冲区是合理的(这样我可以按任意顺序渲染具有这种纹理的图元),但是我找不到让OpenGL做到这一点的方法.有谁知道它是否可能,在这种情况下,它是如何完成的?
只是为了澄清:你想要将alpha = 0.0的片段写入colorbuffer和depthbuffer?此外,我假设您正在使用混合来屏蔽透明像素,否则这应该不是问题.
在这种情况下,您可以简单地使用丢弃片段分片器中的片段:
if( color.a<=0.0 ){
discard;
}
Run Code Online (Sandbox Code Playgroud)
这将确保条件为真的所有片段根本不会被渲染(而不是与零因子混合到帧缓冲器上).
如果您(无论出于何种原因)编程固定管道,您可以使用alpha测试来获得相同的行为(我个人建议切换到前向兼容(意味着着色器)路径,但那就是这一点).
glEnable(GL_ALPHA_TEST);
glAlphaFunc(GL_GREATER,0.0f);
Run Code Online (Sandbox Code Playgroud)
作为一个额外的好处,因为这些方法杀死片段而不是让它变得不可见,它可能比混合更快(虽然我最近没有调查过,所以它是一种可能,但它通常不应该更慢,所以它仍然是一个加号)
| 归档时间: |
|
| 查看次数: |
2199 次 |
| 最近记录: |