嘿,我正在尝试为帧缓冲区绘制恒定颜色,并使用 RGBA 纹理中的 Alpha 通道将其混合。我一直在研究 glBlendFunc 和 glBlendColor,但似乎无法找到一种方法来忽略纹理中的 RGB 值。我想我必须自己提取 alpha 值并使用 GL_ALPHA 制作第二个纹理。有一个更好的方法吗?
谢谢!
嘿,我正在尝试为帧缓冲区绘制恒定颜色,并使用 RGBA 纹理中的 Alpha 通道将其混合。我一直在研究 glBlendFunc 和 glBlendColor,但似乎无法找到一种方法来忽略纹理中的 RGB 值。我想我必须自己提取 alpha 值并使用 GL_ALPHA 制作第二个纹理。有一个更好的方法吗?
谢谢!
我正在使用颜色编码采摘。这是我正在使用的代码,以便不会选择纹理四边形的透明区域:
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。
使用 glBlendFunc 时,GL_SRC_ALPHA
可GL_DST_ALPHA
用于选择纹理中的 Alpha 通道(选择取决于您的混合操作和纹理)。有关更详细的混合教程,请参阅:
相关的 OpenGL 文档: