4

我已经成功地在 OpenGL 中绘制了两个平滑的形状,使用一个生成三角形条带的例程,该三角形条带的最外边线的所有顶点都位于alpha 0. 现在我想将它们相交,但我似乎总是失去一个形状的光滑边缘。这是我正在使用的代码:

// Draw: smooth black shape as normal

glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_TRUE);
// Draw: smooth black shape into alpha channel

glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
glBlendFunc(GL_DST_ALPHA, GL_SRC_ALPHA);
// Draw: Yellow overlay shape with black shape's alpha

// Reset blending modes for rest of program

组合形状

这是结果(在底部)——黄色形状失去了平滑的右侧边缘,因为这些像素中的 alpha 现在为 1。我怎样才能获得平滑的相交形状?

4

2 回答 2

0

你需要这样的片段:

glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glBlendEquation(GL_FUNC_ADD);
glEnable(GL_BLEND);

我认为一个关键要素是 glEnable(GL_BLEND)。

于 2013-03-14T19:11:01.077 回答
0

我为这个问题苦苦挣扎了很长时间,并尝试了每个绘图顺序和和的glColorMask组合glBlendEquation。最后我意识到有一个非常简单的解决方案——预乘 alpha。

alpha=0在我的“平滑形状”绘图例程中,我允许指定外部平滑颜色,而不是将外部平滑边缘绘制为相同颜色。对于黄色形状,我指定了黑色,这给了我一个平滑的边缘,同时整个形状也有一个平滑的边缘——即使黄色形状的右侧边缘没有被 Alpha 通道掩盖。

于 2013-07-25T07:29:55.653 回答