在openGL中重叠部分透明的形状

时间:2011-07-31 17:11:59

标签: opengl-es drawing transparency fill shapes

请查看我发现的这段简洁代码:

glEnable(GL_LINE_SMOOTH);

glColor4ub(0, 0, 0, 150);
mmDrawCircle( ccp(100, 100), 20, 0, 50, NO);

glLineWidth(40);
ccDrawLine(ccp(100, 100), ccp(100 + 100, 100));

mmDrawCircle( ccp(100+100, 100), 20, 0, 50, NO);

其中mmDrawCircle和ccDrawLine只是以某种方式绘制这些形状[FILLED] ...(ccp表示分别具有给定x,y坐标的点)。

我的问题....是的,你猜对了,这条线与圆圈重叠,两者都是半透明的(半透明的)。所以,最终的形状就在那里,但是重叠部分变得更暗,整体形状看起来很难看。即如果我用255 alpha画画,我会没事的。

有没有办法告诉OpenGL渲染重叠部分中的一个形状?

(形状显然是一个带圆角的矩形..半圆..)

1 个答案:

答案 0 :(得分:2)

您可以打开GL_DEPTH_TEST并首先渲染线条,然后再靠近相机。然后,当您渲染下面的圆圈时,不会触及该线条的碎片。 (您也可以使用模板缓冲区来实现这样的效果。)

请注意,这可能看起来仍然很难看。如果您想使用消除锯齿,您应该非常认真地考虑应用哪种混合模式以及渲染基元的顺序。