2011-01-13 100 views
1

我有一些麻烦渲染具有8位alpha通道的纹理 - 即,它被平化为1位,glBlendFunc()似乎没有做任何事情。OpenGL多位Alpha纹理

这里是直接模式的呼叫:

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通道。

任何帮助将不胜感激!


编辑:

在回答的答案:我使用的土壤图像加载库,我要把通过其源看看,看看它是如何做的事情。现在,我只是将这个图像渲染到已经渲染的场景的顶部 - 它绝对不是深度问题 - 事实上深度缓冲区测试已关闭。

+1

看起来正确,有什么不看的权利是你的纹理代码,发布您的通话glTexImage2D。 – 2011-01-13 15:22:23

+0

正如我所说,它通过一个库 - 我可能会尝试找到并示例alpha图像加载器并尝试它 - 应该更快地重建静态和调试它通过 – Tomas 2011-01-13 15:41:39

回答

1

透明度最好使用混合函数(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA)实现,原始数据从最远到最近排序。

我会检查以确保您的多边形排序回到前面,否则混合将有不正确的影响。

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

编辑:

此外,glEnable(GL_ALPHA_TEST),并记住使用glAlphaFunc设置你的阿尔法功能。

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

0

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

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