我正在使用精灵动画(OpenGL + C++)。我在混合时遇到了一些麻烦。
我正在尝试加载具有黑色背景的图像并将其绘制在另一个纹理上,而图像周围不会出现黑色块。图像具有 Alpha 通道并启用了混合。
我尝试使用不同的混合功能。我最终得到一个块状图像或半透明图像。
我知道如果我用透明颜色代替黑色背景而不是使用图像编辑软件,我可以做到这一点,但我想在没有它并且不使用图像蒙版的情况下让它工作。
一个更好地了解我的情况的例子。
纹理上的图像和图像处理不正确:
我想要的方式:
这是我正在使用的一些代码。我选择了似乎最相关的内容,因为大量代码分布在几个类中。
glEnable(GL_DEPTH_TEST);
....
....
glEnable(GL_TEXTURE_2D);
/*Drawing the image with black background first*/
glBindTexture(GL_TEXTURE_2D, blockImage);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glEnable(GL_BLEND);
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
//drawing code
...
...
...
/*background texture is drawn last*/
glBindTexture(GL_TEXTURE_2D, bgImage);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glBlendFunc(GL_ONE, GL_DST_ALPHA);
//drawing code
...
glDisable(GL_BLEND);
glDisable(GL_TEXTURE_2D);
我真的不需要实际的代码来做到这一点。对逻辑的简单解释就足够了(绘制和混合的顺序)。