我已经使用生成三角形条的例程在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
Combined Shapes http://img268.imageshack.us/img268/1000/combineshapes.jpg
这是结果(在底部) - 黄色形状失去了平滑的右手边缘,因为这些像素中的alpha现在是1.我怎样才能获得平滑的相交形状?
答案 0 :(得分:0)
你需要这样的代码片段:
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glBlendEquation(GL_FUNC_ADD);
glEnable(GL_BLEND);
我认为关键元素是glEnable(GL_BLEND)。
答案 1 :(得分:0)
我很长时间都在努力解决这个问题,并尝试了glColorMask
和glBlendEquation
的每个绘图顺序和组合。最后我意识到有一个非常简单的解决方案 - 预乘alpha。
在我的“平滑形状”绘图程序中,而不仅仅是将外部平滑边缘绘制为相同的颜色alpha=0
,我允许指定外部平滑颜色。对于黄色形状,我指定了黑色,并且在整个形状具有光滑边缘的同时给了我光滑的边缘 - 即使黄色形状的右边缘没有被alpha通道遮盖。