通过使用alpha混合opengl实现具有透明背景的纹理



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

我使用的是BMP图片格式,我试图将疤痕纹理映射到脸上,但疤痕纹理的背景色在脸上看起来很难看,所以我想去除那个部分,只将疤痕纹理贴图到脸上。我还需要使用alpha混合来实现这一点。我知道我需要使用混合功能:

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

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

听起来你想从精灵中删除背景。如果是这种情况,那么使用一个名为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之间使用某些命令,因此只能使用glTexCourd glColor glVertex和其他类似的命令。因此,使用一个glBegin()/glEnd()组合作为背景,然后更改设置,然后使用另一个glBegin()/glEnd()来绘制精灵。

最新更新