OpenGL blending function to elminate primitive overlap but maintain overall opacity

有些话、适合烂在心里 提交于 2019-12-08 04:52:53

问题


I have some geometry which has a single primitive set that's a tri-strip. Some of the triangles in the primitive overlap, so when I add a material to the geometry with an alpha value I see the overlap (as expected). I want to get rid of this effect without changing the geometry though -- I tried playing around with different blending modes (glBlendFunc()) but I couldn't get this to work. I got some interesting results, but nothing that would eliminate opacity effects within the primitives of the tri strip, and preserve opacity for the entire object. I'm using OpenSceneGraph, but it provides a method to call glBlendFunc() for the geometry in question.

So from the image, assume that pink roads, purple roads and yellow roads constitute three separate objects, each created using a single tri strip (there are multiple strips, but for arguments sake, pretend that there were only three different colored tri strips here). I basically don't want to see the self intersections within the same color

Also, my question is pretty much the same as this one: OpenGL, primitives with opacity without visible overlap, but I should note that when I tried the blending mode in accepted answer for that question, the strips weren't rendered in the scene at all.


回答1:


I've had the same issue in a previous project. Here's how I solved it :

glBlendFunc(GL_ONE_MINUS_DST_ALPHA, GL_DST_ALPHA)

and draw the rectangles. The idea behind this is that you draw a rectangle with the desired transparency which is taken from the framebuffer, but in the progress mask the area you've drawn to so that your subsequent rectangles will be masked there.

Source : Stackoverflow : Overlapping rectangles




回答2:


One way to do this is to render each set of paths to a texture and then draw the texture onto the window with alpha. You can do this for each color of path.

This outlines the general idea.



来源:https://stackoverflow.com/questions/10183311/opengl-blending-function-to-elminate-primitive-overlap-but-maintain-overall-opac

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