【问题标题】:OpenGL Multi Bit Alpha TexturesOpenGL 多位 Alpha 纹理
【发布时间】:2011-06-08 13:37:47
【问题描述】:

我在渲染具有 8 位 Alpha 通道的纹理时遇到了一些问题 - 即,它被展平为 1 位,而 glBlendFunc() 似乎没有做任何事情。

这是立即模式调用:

glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);


glBegin(GL_QUADS);
{

    glTexCoord2f(0, 0);
    glVertex2f(0, 0);

    glTexCoord2f(1, 0);
    glVertex2f(356, 0);

    glTexCoord2f(1, 1);
    glVertex2f(356, 356);

    glTexCoord2f(0, 1);
    glVertex2f(0, 356);

}

glEnd();

不用说,在后台已经设置了各种各样的OpenGL状态,显然其中之一

是否有任何我不知道的状态会干扰混合阶段?

我的 blendfunc 对吗?从我查看的互联网页面来看,这似乎是正确的 - 但是我已经检查了 GDEBugger 中的纹理,因此图像肯定已经加载了 8 位 alpha 通道,并且尝试了没有 alpha 通道和一位的图像阿尔法通道。

任何帮助将不胜感激!


编辑:

响应答案:我正在使用 SOIL 图像加载库,我将查看它的源代码,看看它是如何工作的。现在,我只是在已经渲染的场景之上渲染这个图像——它绝对没有遇到深度问题——实际上深度缓冲区测试已经关闭。

【问题讨论】:

  • 看起来不错,看起来不正确的是您的纹理代码,请发布您的 glTexImage2D 调用。
  • 正如我所说,它通过一个库 - 我可能会尝试查找和示例 alpha 图像加载器并尝试一下 - 应该更快地静态重建并通过它进行调试
  • 从我在 gDEBugger 中看到的内容来看,一切似乎都井井有条 - 图像具有 GL_COMPRESSED_ST3C_RBGA_DXT5_EXT 格式
  • 尝试启用 alpha 测试并设置 alpha func。请参阅下面的编辑答案。

标签: c++ opengl glblendfunc


【解决方案1】:

你没有发布另一个重要的部分,那就是你是如何创建和配置你的纹理的。而且我认为问题出在此处,而不是您发布的代码中。

为了使混合在上述情况下正常工作,您必须在纹理中启用 Alpha 通道。

【讨论】:

    【解决方案2】:

    透明度最好使用混合函数(GL_SRC_ALPHA、GL_ONE_MINUS_SRC_ALPHA)和从最远到最近排序的基元来实现。

    我会检查以确保您的多边形是从后向前排序的,否则混合会产生不正确的效果。

    我还会确保您在加载纹理时调用 glTexImage2D 使用的是 GL_RGBA 或 GL_BGRA。

    编辑:

    此外,glEnable(GL_ALPHA_TEST) 并记住使用 glAlphaFunc 设置您的 alpha 函数。

    http://www.gamedev.net/topic/105082-glalphafunc/

    【讨论】:

    • 这是 alpha 测试。伙计,我发誓我启用了它。哦,好吧。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-11
    • 1970-01-01
    • 1970-01-01
    • 2015-11-14
    • 1970-01-01
    • 2010-09-30
    • 1970-01-01
    相关资源
    最近更新 更多