纹理与透明背景使用alpha混合opengl

时间:2014-03-01 22:05:51

标签: c++ opengl textures alphablending alpha-transparency

我有疤痕纹理,我想通过使用alpha混合来消除背景肤色。但是,我在更改特定纹理的单个像素的不透明度方面存在问题。具有透明背景的纹理最简单的方法是什么?我正在使用C ++和openGL。

我正在使用BMP图片格式,我正在尝试将疤痕纹理映射到脸部,但疤痕纹理的背景颜色在脸上看起来很难看,所以我想要删除那部分并且只有疤痕纹理映射到脸上。我还需要使用alpha混合来做到这一点。我知道我需要使用混合功能:

glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);

如何更改每个纹理的透明度?

1 个答案:

答案 0 :(得分:0)

听起来你想从sprite中删除背景。如果是这种情况,那么使用一个名为gimp的程序,然后模糊选择背景并删除然后导出并关闭它但是当它要求在导出期间保存时说不。 Google gimp和后台编辑,您将看到所需的信息和工具。

glBlendFunc (GL_ONE, GL_ONE); 

您可能希望使用混合函数中纹理映射产生的alpha值。如果是这样,(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA)始终是一个很好的函数。

但是,如果要在基元纹理映射时进行混合(即,您希望纹理贴图的某些部分允许基础的基础颜色显示),则不要使用OpenGL混合。相反,您将使用glTexEnv(),并将纹理环境模式设置为GL_BLEND。在这种情况下,您需要将纹理环境颜色保留为其默认值(0,0,0,0)。

将颜色设置为(1,1,1,1)会更容易,并使用默认的GL_MODULATE。此外,您只能在glBegin()和glEnd之间使用某些命令,因此只使用glTexCoord glColor glVertex和其他类似命令。因此,使用一个glBegin()/ glEnd()组合作为背景,然后更改设置,然后使用另一个glBegin()/ glEnd()来绘制精灵。