【发布时间】: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