2

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

谢谢!

4

2 回答 2

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。

于 2011-02-12T16:42:42.727 回答
0

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

相关的 OpenGL 文档:

于 2010-03-21T04:59:23.373 回答