【问题标题】:What is the best type of curve to approximate a smoothed polygonal mesh近似平滑多边形网格的最佳曲线类型是什么
【发布时间】:2020-06-23 22:27:11
【问题描述】:

我有一个由顶点和三角形组成的 3D 网格。我知道顶点的位置和平滑法线,以及三角形的平面法线。 我想计算通过 2 个给定顶点的曲线段,仅使用它们的位置和法线。

现在,我使用的是Catmull Rom spline,但它需要 4 个点来绘制 1 个曲线段,如下图所示的简单网格的切片视图:

要绘制 B 和 C 之间的黄色曲线段,对应于红色边缘的估计曲率,我必须使用顶点 A、B、C 和 D 的位置 其他青色部分也是用同样的方法绘制的。

  1. 我想仅使用线段顶点中的数据来计算每个曲线段。这里只使用 B 和 C 的位置和法线作为输入数据来计算黄色曲线段......并且在计算所有段的曲线时仍然保持均匀的整体形状

  2. 我不确定这条曲线是否适合表示网格的平滑法线显示的模拟曲率,同时使用简单的 3D 漫反射着色进行渲染,因此我想知道其他类型的曲线可能是在这种精确的情况下更好的匹配。 也许还有一种更适合仅使用两个点的位置和法线作为输入的约束。

谢谢! :)


编辑: 使用 Fang 建议的 Hermite 样条的结果: 这对我来说是完美的。再次感谢:)

【问题讨论】:

  • 目前还不清楚每个顶点的平滑法线将如何影响曲线的形状。你想让曲线在顶点的切线垂直于法线吗?
  • 在这种情况下,我不在乎切线是否垂直于法线。在我的照片中,它们不是,结果很好......但曲线不是从我想要关注的数据中生成的。我正在这里尝试。所以假设我对任何解决方案都很好,只要它只涉及 2 点位置和法线作为生成曲线段的起点。
  • 如果你坚持顶点B和C之间的曲线段只能从顶点B和C处的位置和法线构造,那么曲线段很可能不会与它的平滑连接。相邻段。
  • 是的,这也是我的猜测。但我还不确定是否真的需要这种连续性,所以我会先尝试从这个起点得到的任何曲线。

标签: 3d polygon mesh curve smoothing


【解决方案1】:

如果你只是想在两个端点和两个端点法向量之间进行插值,你可以使用三次 Hermite 曲线。 Cubic Hermite curve 由两个端点和两个末端一阶导数定义。由于顶点没有一阶导数,因此可以从顶点法线推断它们

给定顶点 B 和 C 以及顶点法线 Nb 和 Nc,

  1. 通过将向量 S = 1/3* (C - B) 投影到由顶点 B 及其顶点法线 Nb 定义的平面上,在顶点 B 处构造一阶导数。
  2. 通过将相同的向量 S 投影到由顶点 C 及其顶点法线 Nc 定义的平面上,在顶点 C 处构造一阶导数。
  3. 三次 Hermite 曲线现已完全定义,因为我们有两个端点(顶点 B 和 C)和两个末端一阶导数。它将插入顶点 B 和 C,其在 B 和 C 处的切线将垂直于法线。

如果vector(BC)已经垂直于法线Nb和Nc,则三次Hermite曲线将变为直线。

这样构造的三次厄米特曲线只利用了顶点B和C之间的线段内的数据。因此,它很可能不会平滑地连接到其相邻的曲线段。如果您想避免这个问题,那么您将不得不利用来自相邻段的数据。不是将向量 S = 1/3*(C-B) 投影,而是将向量 Sb 和 Sc 分别投影到顶点 B 和 C 的平面上

   Sb = m*(A + C - 2*B)/2,
   Sc = m*(B + D - 2*C)/2.

而 m 是一个常数(通常

这样,线段BC和线段AB在顶点B处的一阶导数相同,保证曲线段BC和曲线段AB的平滑连接。

【讨论】:

  • 非常感谢,我试试这个:)
猜你喜欢
  • 1970-01-01
  • 2019-04-08
  • 1970-01-01
  • 1970-01-01
  • 2019-06-24
  • 2019-11-01
  • 2014-09-03
  • 1970-01-01
  • 2012-02-07
相关资源
最近更新 更多