【问题标题】:joining points with smooth curves in opengl在opengl中用平滑曲线连接点
【发布时间】:2017-03-30 13:02:13
【问题描述】:

我有一个点列表说

a、b、c 和 d

我想加入喜欢

a - b - c - d

现在我只是一次取两个点并在它们之间画一条线。但结果是尖角。所以我想用曲线把它们连接起来,这样角落就变得光滑了。我读过关于贝塞尔曲线来绘制曲线,但这需要额外的控制点来绘制曲线。我也不知道如何使用曲线连续连接多个点。有什么方法可以做到这一点,或者我可以做些什么或努力使这成为可能?

我同时使用 opengl 和 SVG 来输出结果。

【问题讨论】:

  • OpenGL 只知道点、线和三角形。句号。绘制曲线(贝塞尔曲线、圆弧、样条曲线或其他)必须由您完成。镶嵌是一个很好的帮助。
  • 我也许应该改进 Ripi2 的答案,指出您现在可以找到的 有用 OpenGL 实现仅支持点、直线和三角形(无论如何也仅支持光栅化)。老旧的 OpenGL-1.1 实际上有一个叫做“评估器”的东西,它允许通过评估 Bézier 曲线,指定补丁坐标而不是模型空间坐标来提交 glBegin/glEnd 块中的顶点。然而,这只是一个便利功能,会使用平面/直线基元对补丁进行细分。

标签: opengl svg bezier curves


【解决方案1】:

Catmull-Rom 样条曲线可能是将点与曲线连接起来最简单的方法,不需要额外的控制点(你需要在开始和结束处添加几个额外的点,但你可以像 e=d+( d-c))。这看起来是一本不错的入门书:https://www.mvps.org/directx/articles/catmull/

我发现当点的间距非常不均匀时,很难获得美观的曲线。

【讨论】:

  • 请注意,作为一个关于 opengl 的问题,这个答案不是很有用:OpenGL 不能做任何类型的曲线。它可以做纹理、光照和凹凸贴图等,以使某些东西在退出渲染管道后看起来弯曲,但它只需要网格点作为输入。
  • 我可能确实在答案中留下了很多未说明的内容,但我认为他已经决定他需要细分他的线条并提交额外的顶点作为线条列表或类似的东西。我对这个问题的解读是,他正在寻找合适的样条曲线来帮助他这样做,而不需要额外的控制点。这篇文章包含他需要的公式,并有一些图像表明他希望达到什么样的结果。
  • 谢谢,我自己实现了 Catmull-Rom 样条并得到了想要的输出结果。
猜你喜欢
  • 1970-01-01
  • 2017-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-19
  • 1970-01-01
  • 2012-08-31
相关资源
最近更新 更多