如何将厚的二维线条渲染成多边形?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (9)
  • 关注 (0)
  • 查看 (120)

我有一条由二维点组成的路径。我想把这些变成一个三角形的条,以便渲染出一条具有特定厚度的纹理线(以及其他类似的东西)。

有没有简约周围的资源可以提供算法、代码或任何更多关于高效执行此操作的信息?

例子:

http://www.FreeImagehosting.net/upads/52dc639727.png

提问于
用户回答回答于

检查连接角,线的宽度和连接线段的长度(短于其宽度的线段是皮塔)。使用一些启发式方法。

我不知道你的平均行数据是什么样子,但在我的例子中,超过90%的宽行没有退化的情况。

其他行:

你很可能已经发现,如果你容忍透支,生成几何图形要容易得多。这样做,让多边形CSG算法和Tesselation算法做艰苦的工作。

GLU tesselator速度快,健壮,从未崩溃(与大多数其他算法不同)。它是免费的,许可证允许我把它包括在一个商业程序中。质量和速度是可以的。你不会得到Delaunay三角剖分的质量,但因为你只是需要三角渲染,这不是一个问题。

用户回答回答于

不要渲染黑色边框,填充颜色可以是不透明的。

用GL_LINES。你可以指定宽度,过滤,平滑,纹理任何东西。可以使用glDrawArray()呈现所有顶点。

用户回答回答于

把半径=宽度/2的圆周放在每个多边形的顶点上。

用户回答回答于
用户回答回答于

可以参数化以保留所有细节。

使用镶嵌算法和代码-。

用户回答回答于

一种方法是求出两段之间的交点角,然后沿着该交汇线移动到离曲面一定距离的地方,并将其视为带状顶点。但它看上去并不直观,丝带的宽度会有所不同。

另一种方法是实际计算线段表面的法线,并使用它来计算该段的理想带状边缘,并在带状段之间进行实际的交叉测试。这是很好的工作,除了尖锐的角,带状线段交叉口太远(如果段间角接近180‘)。

http://paulburke.net/geometry/lineline2d/

请参阅我的源代码:https://gist.github.com/1474156

用户回答回答于

平分每个2d顶点的角度,这将创建一个很好的人字线。然后沿着这条线移动,无论是向内还是向外,你现在有你的内多边形点和外多边形点。移动到下一个点,重复相同的过程,在此过程中构建新的多边形点。然后,应用三元法来获得渲染就绪的顶点。

扫码关注云+社区

领取腾讯云代金券