我需要在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);
背景是没有阿尔法通道的 tga。图像是带有阿尔法通道的 tga。
这会渲染背景上有 alpha 但太亮的图像。
我读到它应该像以下一样简单:
glBlendFunc(GL_ONE, GL_ONE);
但是,尽管具有 alpha 通道,图像仍被渲染为白色正方形。
显然我做错了什么。
您将无法使用混合来获得相当于Photoshop"颜色闪避"效果的效果。这是一个比使用标准混合逻辑可以表示的更复杂的数学函数。因此,您将不得不提出一些程序化混合方法来使其工作。
有一种方法可以在 GL 混合函数中使颜色闪避。这就像Photoshop版本的混合模式,只是它比Photoshop的"颜色闪避"更暗。您必须使用此类型的函数:
glBlendFunc(GL_DST_COLOR, GL_ONE);