我需要在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通道的图像会呈现为白色方块。
显然我做错了。
答案 0 :(得分:3)
你无法使用混合来获得相当于Photoshop“Color Dodge”效果的效果。这是一个比使用标准混合逻辑表达的更复杂的数学函数。所以你将不得不想出一些程序化的混合方法来使它工作。
答案 1 :(得分:0)
有一种方法可以在GL混合功能中进行颜色躲闪。这就像混合模式的Photoshop版本,但只有它比photoshop的“Color Dodge”更暗。你必须使用这种类型的功能:
glBlendFunc(GL_DST_COLOR, GL_ONE);