overlapping partially transparent shapes in openGL

扶醉桌前 提交于 2019-12-25 01:14:47

问题


Please check this neat piece of code I found:

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);

where mmDrawCircle and ccDrawLine just draws these shapes [FILLED] somehow... (ccp means a point with the given x, y coordinates respectively).

My problem .... Yes, you guessed it, The line overlaps with the circle, and both are translucent (semi transparent). So, the final shape is there, but the overlapping part becomes darker and the overall shape looks ugly.. i.e, I would be fine if I was drawing with 255 alpha.

Is there a way to tell OpenGL to render one of the shapes in the overlapping parts??

(The shape is obviously a rectangle with rounded edges .. half-circles..)


回答1:


You could turn on GL_DEPTH_TEST and render the line first and a little closer to the camera. When you then render the circle below, the fragments of the line won't be touched. (You can also use the stencil buffer for an effect like this).

Note that this might still look ugly. If you want to use anti-aliasing you should think quite hard on which blending modes you apply and in what order you render the primitives.



来源:https://stackoverflow.com/questions/6890956/overlapping-partially-transparent-shapes-in-opengl

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!