2

我需要在 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 通道,图像仍被渲染为白色方块。

显然我做错了什么。

4

2 回答 2

3

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

于 2012-09-16T23:43:17.780 回答
0

有一种方法可以在 GL blend func 中进行颜色减淡。它就像那个混合模式的 Photoshop 版本,但它比 Photoshop 的“颜色减淡”更暗。您必须使用这种类型的功能:

glBlendFunc(GL_DST_COLOR, GL_ONE);
于 2016-02-23T11:11:58.970 回答