【问题标题】:Meaning of knots when drawing a NURBS curve?绘制 NURBS 曲线时结的含义?
【发布时间】:2022-02-02 21:36:08
【问题描述】:

我正在使用gluNurbsCurve 绘制带有一些控制点的曲线。我已按照红皮书的说明进行了基本设置,并且工作正常,我正在尝试对其进行扩展。
此示例如下所示:

float knots[8] = {0,0,0,0,1,1,1,1};
float pnts[4][3] = { {...},{...},{...},{...} };
GLUnurbsObj *m = gluNewNurbsRenderer();
gluBeginCurve(n);
gluNurbsCurve(n, 8, knots, 3, pnts, 4, GL_MAP1_VERTEX_3)
gluEndCurve(n);

我想知道的一件事是节数据的含义。它如何影响结果?我可以在那里尝试哪些其他选项?
由于某种原因,我找不到任何可以正确解释这一点的教程。

【问题讨论】:

    标签: opengl graphics 3d glu nurbs


    【解决方案1】:

    实际上,网上有很多网站可以解释结向量。这不是 GL 特定的东西,而是 NURBS 的固有属性。所以在谷歌输入“NURBS 结向量”会给你详细的解释。

    我只想说通常结向量的长度为knot_vector_length = number_of_points + degree_of_curve + 1,唯一重要的是比率而不是绝对值。所以{0,1,2,3}{0,2,4,6}是一样的

    在我看来,最重要的节点向量是:

    1) {0,1,2,3,4,5,6,...}

    如果您重复最后一个(或第一个)degree_of_curve-1 点,这将允许您轻松地扩展具有曲率连续性的曲线,但这意味着曲线实际上并未穿过其起点和终点,因此您必须重复最后一个(或第一个)degree_of_curve-1 指向创建连续的闭合曲线。

    另一个重要的形式是

    2) {0,0,0,1,2,3,...,n,n,n}

    而开头的0 和结尾的n 重复degree_of_curve + 1 次。这也是您使用的表格。这将为您提供一条从第一个点开始并在您指定的最后一个点结束的 NURBS 曲线。但它只提供位置连续性。因此,如果你用它制作一条闭合曲线,那么你很可能会产生切向不连续性。

    顺便说一句。如果您只有degree_of_curve + 1 积​​分并使用第二种形式,那么您只有0s 和1s。生成的样条曲线将与贝塞尔曲线相同。

    如果没有图像或数学背景(伯恩斯坦多项式),这真的很难解释

    【讨论】:

      【解决方案2】:
      A knot vector is the curve parameter at which the continuity changes. Try to 
      

      了解如何编写“贝塞尔”曲线。我们将创建一条度数为 num_control_points - 1 的曲线。因此对于具有 4 个控制点的贝塞尔曲线。我们会得到一条 3 次(阶数 = 4)的曲线。所以在这条曲线上的任何地方。连续性将为 C2,这意味着存在曲率连续性。该曲线的节点向量将是 (0, 0, 0, 0, 1, 1, 1, 1)。这来自您在上面给出的代码 sn-p。您已经提供了节点向量和曲线的控制点。

      所以,在参数 0 处可以看出。有 C0 连续性。参数 1 相同。 参数的结值越多。这意味着该参数的连续性是 减少。希望你明白我在说什么。由于曲线的次数为 3。 连续性从( C3 -> C2 -> C1 -> C0 )下降。这就是 ( 0 -> 0 -> 0 -> 0) 的含义 为了。

      我仍在研究(研究:P)如何在统一的节点向量情况下,曲线从中间的某个地方开始。就目前而言,假设节点向量为 (0, 1, 2, 3..7) 的情况。这说明在参数 0 - 1 之间。有一条曲线。在 1 - 2 之间,还有另一个。所以基本上我们把整个曲线分成了7段(当然,程度取决于你)。如果我把它当作一条 3 度的曲线。这意味着我有 7 条不同的曲线,每条曲线都有 3 度。

      希望你按照我说的去做。作为第 1 步,尝试理解节点向量的含义,第 2 步将介绍如何在 Cox De-Boor 递归方程中使用这些节点(这会变得有点复杂)。最后,您将了解权重的含义。这就是首字母缩略词 NURBS(非均匀有理化 B 样条)中“R”的原因。你给的 sn-p 是一个均匀的 B 样条曲线。所以基本上,NURBS 只是任何可能曲线的集合体。 :)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-03-12
        • 1970-01-01
        • 1970-01-01
        • 2015-01-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多