在OpenGL中只使用纹理的alpha通道?

时间:2010-03-21 00:49:00

标签: opengl alphablending

嘿,我正在尝试为帧缓冲区绘制一个恒定的颜色,并使用RGBA纹理中的alpha通道进行混合。我一直在关注glBlendFunc和glBlendColor,但似乎无法找到一种方法来忽略纹理中的RGB值。我想我必须自己拿出alpha值并用GL_ALPHA制作第二个纹理。有更好的方法吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

我正在使用彩色编码拾取。这是我正在使用的代码,因此不会选择纹理四边形的透明区域:

glEnable(GL_COLOR_MATERIAL);
glEnable(GL_TEXTURE_2D);
glEnable(GL_ALPHA_TEST);

glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE);
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_REPLACE);
glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB, GL_PREVIOUS);
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR);
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA, GL_REPLACE);
glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA, GL_TEXTURE);
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA, GL_SRC_ALPHA);

glAlphaFunc(GL_GREATER, 0.5f);

glColor3ub(myColor[0], myColor[1], myColor[2]);

drawTexturedQuad();

基本上我说我希望RGB在应用纹理之前是它的任何东西(这将是myColor),我希望从纹理中取出ALPHA。

答案 1 :(得分:0)

使用glBlendFunc时,GL_SRC_ALPHAGL_DST_ALPHA可用于选择纹理中的Alpha通道(选择哪个取决于您的混合操作和纹理)。有关更详细的混合教程,请参阅:

相关的OpenGL文档: