2012-09-16 82 views
2

我需要在OpenGL中渲染背景图像,我试图获得与Photoshop中的“颜色减淡”相同的结果,但我无法做到。OpenGL中的颜色闪避

现在我做:

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

// background 
glEnable(GL_TEXTURE_2D); 
glBindTexture(GL_TEXTURE_2D, background); 
glBegin(GL_TRIANGLE_STRIP); 
glTexCoord2f(0.0, 0.0); 
... 
glEnd(); 
glDisable(GL_TEXTURE_2D); 

// image 
glEnable(GL_TEXTURE_2D); 
glBindTexture(GL_TEXTURE_2D, image); 
glBegin(GL_TRIANGLE_STRIP); 
glTexCoord2f(0.0, 0.0); 
... 
glEnd(); 
glDisable(GL_TEXTURE_2D); 

背景是没有alpha通道的TGA。图像是带alpha通道的tga。

这会渲染带背景上的alpha图像,但太亮。

我读,因为它应该是一样容易:

glBlendFunc(GL_ONE, GL_ONE); 

但是,尽管有alpha通道的图像被呈现为白色正方形。

显然我做错了什么。

回答

3

你不能使用混合来获得相当于Photoshop的“颜色减淡”效果。这是一个比使用标准混合逻辑可以表达的更复杂的数学函数。所以你将不得不提出一些程序化的混合方法来使其工作。

+0

我假设有可能开箱即用。现在看来,与背景纹理的混合没有发生,而是与背景颜色(白色)相反。 –

0

有一种方法可以在GL混合功能中进行颜色闪避。这就像混合模式的Photoshop版本,但只有它比Photoshop的“颜色道奇”更暗。你必须使用这种类型的功能:

glBlendFunc(GL_DST_COLOR, GL_ONE);