OpenGL中的颜色躲闪

时间:2012-09-16 22:03:18

标签: opengl color-blending

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

现在我正在做:

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通道的图像会呈现为白色方块。

显然我做错了。

2 个答案:

答案 0 :(得分:3)

你无法使用混合来获得相当于Photoshop“Color Dodge”效果的效果。这是一个比使用标准混合逻辑表达的更复杂的数学函数。所以你将不得不想出一些程序化的混合方法来使它工作。

答案 1 :(得分:0)

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

glBlendFunc(GL_DST_COLOR, GL_ONE);