绘制NURBS曲线时的结点含义?

sho*_*osh 4 opengl 3d graphics nurbs glu

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);
Run Code Online (Sandbox Code Playgroud)

我想知道的一件事是结数据的含义。它如何影响结果?我在那里还能尝试其他什么选择?
由于某种原因,我找不到任何可以正确解释此问题的教程。

Pet*_*erT 5

实际上,在线上有很多站点可以解释结矢量。这不是GL特定的东西,而是NURBS的固有属性。因此,在Google中输入“ 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。所得的样条曲线将与贝塞尔曲线相同。

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