glBlendFunc和alpha混合

时间:2008-10-09 12:36:02

标签: c++ opengl

我想知道glBlendFunc是如何工作的。例如,我有2个gl纹理,其中alpha在tex1上,我希望在我的最终图像中有alpha。如果颜色在tex1上,我希望tex2的颜色为。

4 个答案:

答案 0 :(得分:1)

glBlendFunc仅适用于最终颜色片段如何与帧缓冲区混合。我认为你想要的是多纹理,通过使用glTexEnv混合纹理阶段来组合两个纹理,或者使用片段着色器来组合两个纹理。

答案 1 :(得分:1)

抱歉,简单混合无法做到这一点。例如,我们习惯使用frament着色器做同样的事情。

答案 2 :(得分:1)

借调着色器。如果您可以使用着色器,则可以更轻松地使用数据执行您想要的操作,而不是使用晦涩的混合函数。

答案 3 :(得分:0)

可悲的是,这是针对iPhone上的openGL ES,所以没有着色器,而是采取了点。我的问题是一个非常简化的问题版本,我需要将一个简单的颜色(包括alpha)应用到定义纹理的一部分。正如李指出的那样,纹理混合是为了让alpha显示在帧缓冲区上。解决方案是坚持艺术家将纹理的“动作位”设为白色,然后为我渲染的顶点指定颜色。这样的事情。

glTexCoordPointer( 2, GL_FLOAT, 0, sprite->GetTexBuffer() );
glVertexPointer( 3, GL_FLOAT, 0, sprite->GetVertexBuffer() );
glColorPointer( 4, GL_FLOAT, 0, sprite->GetColorBuffer() );
glDrawArrays( GL_TRIANGLES, 0, 6 ); // Draw 2 triangles

即使它有纹理,颜色也意味着它会增加纹理的颜色,所以它是alpha,它仍然是alpha,而它是白色的(因为我必须制作它),它就变成了颜色该点的颜色指针。