gpt4 book ai didi

OpenGL:我可以从深度缓冲区中屏蔽完全透明的片段吗?

转载 作者:行者123 更新时间:2023-12-04 17:58:17 24 4
gpt4 key购买 nike

有没有办法告诉 OpenGL 不要将完全透明片段的深度写入深度缓冲区?

请确定,我要渲染的纹理永远不会是半透明的;它的 alpha 值只有 1.0 或 0.0,我使用 GL_NEAREST 过滤器,所以它永远不会插入到任何介于两者之间的值。

我认为当片段的 alpha 值为 0.0 时,OpenGL 能够简单地不写入深度缓冲区是合理的(这样我可以以任何顺序渲染具有此类纹理的基元),但我找不到让 OpenGL 做到这一点的方法。有谁知道这是否可能,在这种情况下,它是如何完成的?

最佳答案

澄清一下:您希望 alpha=0.0 的片段既不写入颜色缓冲区,也不写入深度缓冲区?此外,我假设您目前正在使用混合来屏蔽透明像素,否则这应该不是问题。

在这种情况下,您可以简单地在片段着色器中使用丢弃片段:

if( color.a<=0.0 ){
discard;
}

这将确保条件为真的所有片段都不会被渲染(而不是与零因子混合到帧缓冲区上)。

如果您(无论出于何种原因)编程固定管道,您可以使用 alpha 测试来获得相同的行为(我个人建议切换到向前兼容(意思是着色器)路径,但这不是重点)。
glEnable(GL_ALPHA_TEST);
glAlphaFunc(GL_GREATER,0.0f);

作为一个额外的好处,因为这些方法会杀死片段而不是使其不可见,它可能比混合更快(虽然我最近没有研究过,所以它是一个可能,但它通常不应该更慢,所以它仍然是一个加号)

关于OpenGL:我可以从深度缓冲区中屏蔽完全透明的片段吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4092998/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com