OpenGL透明纹理问题

Posted

技术标签:

【中文标题】OpenGL透明纹理问题【英文标题】:OpenGL transparent texture issue 【发布时间】:2015-04-22 15:05:34 【问题描述】:

我对带有 Alpha 通道的纹理有疑问。我正在用树叶渲染一棵棕榈树:

但如您所见,图片左侧的树叶上方是天空。

在我的代码中,先渲染天空,然后渲染树木。 这是我渲染一棵棕榈树的代码:

        RenderFrame(0);//trunk
        //glColor3f(0.0, 0.6, 0.0);
        glEnable(GL_BLEND);
        glDisable(GL_CULL_FACE);
        glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
        glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
        leaves.RenderFrame(0);
        glEnable(GL_CULL_FACE);
        glDisable(GL_BLEND);

【问题讨论】:

您是否启用了深度测试?如果是,叶子可能就在天空的后面,被深度测试消除了。 情况更糟。我看到在其他物体后面的叶子。我认为必须对其进行排序(从最远到最近的相机)... 【参考方案1】:

就像其他人所说,渲染顺序似乎是错误的。我过去遇到过这个问题,这不是一个简单的解决方案,特别是因为您使用的是不推荐使用的立即模式。在这个问题中看看这些解决方案:OpenGL ES2 Alpha test problems

【讨论】:

以上是关于OpenGL透明纹理问题的主要内容,如果未能解决你的问题,请参考以下文章

OpenGL渲染到纹理透明度问题

透明四边形上的OpenGL DECAL纹理?

渲染具有透明度的纹理时 OpenGL 不需要的像素

OpenGL:渲染具有大量纹理透明度的模型,没有绘制顺序?

在 Android 上使用 OpenGL ES 显示透明纹理的问题

如何阻止透明纹理上的OpenGL背景出血