2010-03-21 145 views
2

嘿,我试图画一个常量的颜色到framebuffer,并使用RGBA纹理中的alpha通道进行混合。我一直在看glBlendFunc和glBlendColor,但似乎无法找出一种方法来忽略纹理中的RGB值。我想我必须自己提取alpha值,并使用GL_ALPHA创建第二个纹理。有一个更好的方法吗?在OpenGL中只使用alpha通道纹理?

谢谢!

+0

最好的答案很简单:使用着色器。在GLSL代码中,您可以使用任何您可以想象的方式使用纹理数据。 – Kos 2011-02-12 16:47:06

回答

0

当使用glBlendFunc,GL_SRC_ALPHAGL_DST_ALPHA可以用来选择在你的纹理α通道(其选择取决于你的混合操作和纹理)。如需更详细的教程混合看到:

相关的OpenGL文档:

+0

glBlendFunc可以让你选择不同的alpha值,以及如何与它们混合,但据我所知,所有这些都会影响你的_scale和combine_的源和目标颜色。我试图忽略源颜色,并使用RGBA纹理中的alpha值混合不同的颜色。 – Chris 2010-03-21 06:14:53

+0

这听起来像你想掩盖?请参阅教程#3链接,了解“图片上的蒙版”部分。这是你想要做的吗? – Clinton 2010-03-21 09:46:55

+0

教程#3链接已死亡。 – sharvey 2010-11-14 21:57:33

1

我使用颜色编码采摘。这是我使用这样的代码纹理四的那透明区域不会被选择的是:我说我想要的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可以从纹理中获取。

+0

嘿,这个工程! – 2013-02-26 22:28:53