【发布时间】:2010-09-16 06:26:39
【问题描述】:
我想知道 glBlendFunc 是如何工作的。例如,我有 2 个 gl 纹理,其中 alpha 在 tex1 上,我想在我的最终图像中使用 alpha。颜色在 tex1 上的地方,我想要 tex2 的颜色。
【问题讨论】:
我想知道 glBlendFunc 是如何工作的。例如,我有 2 个 gl 纹理,其中 alpha 在 tex1 上,我想在我的最终图像中使用 alpha。颜色在 tex1 上的地方,我想要 tex2 的颜色。
【问题讨论】:
glBlendFunc 仅适用于最终颜色片段如何与帧缓冲区混合。我认为你想要的是多重纹理,通过使用 glTexEnv 混合纹理阶段来组合两个纹理,或者使用片段着色器来组合两个纹理。
【讨论】:
抱歉,无法通过简单的混合来做到这一点。例如,我们过去常常使用 frament 着色器来做同样的事情。
【讨论】:
第二个着色器。如果您可以使用着色器,则可以更轻松地对数据做您想做的事情,而不是使用神秘的混合功能。
【讨论】:
遗憾的是,这是针对 iPhone 上的 openGL ES 的,所以没有着色器,但要点是。我的问题是问题的一个非常简化的版本,我需要对定义的纹理的一部分应用简单的颜色(包括 alpha)。正如 Lee 所指出的,纹理混合是为了让 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,而它是白色的(因为我必须制作它),它变成了颜色该点的颜色指针。
【讨论】: