嘿,我试图画一个常量的颜色到framebuffer,并使用RGBA纹理中的alpha通道进行混合。我一直在看glBlendFunc和glBlendColor,但似乎无法找出一种方法来忽略纹理中的RGB值。我想我必须自己提取alpha值,并使用GL_ALPHA创建第二个纹理。有一个更好的方法吗?在OpenGL中只使用alpha通道纹理?
谢谢!
嘿,我试图画一个常量的颜色到framebuffer,并使用RGBA纹理中的alpha通道进行混合。我一直在看glBlendFunc和glBlendColor,但似乎无法找出一种方法来忽略纹理中的RGB值。我想我必须自己提取alpha值,并使用GL_ALPHA创建第二个纹理。有一个更好的方法吗?在OpenGL中只使用alpha通道纹理?
谢谢!
当使用glBlendFunc,GL_SRC_ALPHA
和GL_DST_ALPHA
可以用来选择在你的纹理α通道(其选择取决于你的混合操作和纹理)。如需更详细的教程混合看到:
相关的OpenGL文档:
我使用颜色编码采摘。这是我使用这样的代码纹理四的那透明区域不会被选择的是:我说我想要的RGB是不管它是应用纹理之前
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();
本质(这将是myColor),我希望ALPHA可以从纹理中获取。
嘿,这个工程! – 2013-02-26 22:28:53
最好的答案很简单:使用着色器。在GLSL代码中,您可以使用任何您可以想象的方式使用纹理数据。 – Kos 2011-02-12 16:47:06