2014-03-01 90 views
0

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

我正在使用BMP图片格式,我试图将疤痕纹理映射到脸上,但疤痕纹理的背景颜色似乎在脸上很难看,所以我想除去该部分并只将疤痕纹理映射到面对。我也需要使用alpha混合来做到这一点。我知道我需要使用混合函数:

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

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

+2

如果您需要帮助,您将必须更具体。如果你无法用单词来描述你的问题,你总是可以包含你的结果图和预期结果的描述。但就目前而言,这主要是猜测工作。 –

回答

0

这听起来像你想从精灵中移除背景。如果是这种情况,那么使用一个名为gimp的程序,然后模糊地选择背景并删除然后导出并关闭它,但是当它在导出时要求保存时说不。谷歌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()绘制精灵。

+0

嘿谢谢你的回答。这是我想要的,但我使用BMP图片格式,并且此格式不允许透明背景,所以照片编辑工具在我的情况下不起作用。无论如何,在openGL中使用alpha混合来实现这一点? – user3369407