OpenGL - 如果 alpha 不要写深度

OpenGL - don't write depth if alpha

本文关键字:深度 alpha 如果 OpenGL      更新时间:2023-10-16

我想在OpenGL中使用C++和GLSL做什么:当纹理具有 alpha 时 (texture.a! = 1.0;)则此像素不会写入深度缓冲区。(对于颜色缓冲区,它被写入)仅当像素纹理 .a == 1.0 时,才会出现写入深度;

在着色器中丢弃不是解决方案 - 则此像素不会写入颜色缓冲区。

有什么想法吗?

@UPDATE:示例:我有一些由OpenGL渲染的UI图像。其中一些在角落里有阿尔法。在场景渲染中,我有"深度预通道",通过不计算一些像素上的光线来节省一些像素。我还想让 UI 图像进入该预通道 - 但只能是完全不透明的像素(alpha = 1.0)。

正如Andon的评论中提到的:"当你写一个片段时,你总是必须写一个深度值,没有办法在着色器级别有选择地启用或禁用它。