我想绘制大量的四边形,每个四边形代表曲线的一小部分,这样曲线看起来很光滑,但实际上只是由线性碎片组成。我还希望能够设置线的粗细和线的混合部分的厚度,使得在混合区域中线线性地丢失其α分量。理想情况下,这些线条能够在3D场景中以任何方式定向,尽管它们通常位于面向相机的平面中。
问题在于难以将线与背景混合而不会使重叠的部分彼此相互作用,在许多重叠的地方变得更亮。我只希望线的一个片段与背景混合,但如果分别渲染每个四边形,很难知道哪个片段是正确的。
有没有一种有效的方法来做这样的事情?或者我是否必须进行某种预处理才能将线条转换为1个网格而不是将其渲染为一堆四边形?
[以下是相互交叉的问题的图片&没有正确混合]
http://i.imgur.com/8cYm1zK.png
这是一个相关的问题,但它有所不同,因为我想混合四边形,使它们线性脱落。如果从该线程实现解决方案,则混合看起来不正确。
OpenGL blending function to elminate primitive overlap but maintain overall opacity
答案 0 :(得分:3)
看起来您将线条渲染为简单的重叠矩形,如下所示:
为了获得完美的效果,你需要像这样渲染角帽,没有任何重叠:
想想你是如何构建那些橙色点的。您可以使用三角形风扇来近似圆形盖帽。您也可以根据自己的喜好制作尖角或扁平角。
回应@ GuyRT的回答:GL_MAX
混合模式如下所示:
答案 1 :(得分:2)
您可以使用glBlendEquation( GL_MAX )
将线条绘制到FBO中,然后使用glBlendEquation( GL_FUNC_ADD )
(默认的混合方程式)将结果与背景合并。
一个更好的选择(根据japreiss&OP和OP的评论),只是将线条的明亮部分绘制到FBO中,然后模糊结果(首先水平到另一个缓冲区)在合成到背景之前,然后再次垂直进入第一个缓冲区。