0

我正在尝试编写一个包含 3D NURBS 曲线(不是曲面)的波前 .OBJ 文件。我发现以下链接描述了如何在 .OBJ 文件中正确格式化曲线和曲面:http: //www.martinreddy.net/gfx/3d/OBJ.spec

没有关于有理 b 样条曲线的示例,从文档中我不清楚节向量是如何在该parm u部分中格式化的。任何帮助,将不胜感激。

相关代码示例如下。在上面的链接中,有一个有理 b 样条曲面的描述:

v -1.3 -1.0  0.0
v  0.1 -1.0  0.4  7.6
v  1.4 -1.0  0.0  2.3
v -1.4  0.0  0.2
v  0.1  0.0  0.9  0.5
v  1.3  0.0  0.4  1.5
v -1.4  1.0  0.0  2.3
v  0.1  1.0  0.3  6.1
v  1.1  1.0  0.0  3.3
vt 0.0  0.0
vt 0.5  0.0
vt 1.0  0.0
vt 0.0  0.5
vt 0.5  0.5
vt 1.0  0.5
vt 0.0  1.0
vt 0.5  1.0
vt 1.0  1.0
cstype rat bspline
deg 2 2
surf 0.0 1.0 0.0 1.0 1/1 2/2 3/3 4/4 5/5 6/6 \
7/7 8/8 9/9
parm u 0.0 0.0 0.0 1.0 1.0 1.0
parm v 0.0 0.0 0.0 1.0 1.0 1.0
end

还有一个贝塞尔曲线的例子:

v -2.300000 1.950000 0.000000
v -2.200000 0.790000 0.000000
v -2.340000 -1.510000 0.000000
v -1.530000 -1.490000 0.000000
v -0.720000 -1.470000 0.000000
v -0.780000 0.230000 0.000000
v 0.070000 0.250000 0.000000
v 0.920000 0.270000 0.000000
v 0.800000 -1.610000 0.000000
v 1.620000 -1.590000 0.000000
v 2.440000 -1.570000 0.000000
v 2.690000 0.670000 0.000000
v 2.900000 1.980000 0.000000
# 13 vertices

cstype bezier
ctech cparm 1.000000
deg 3
curv 0.000000 4.000000 1 2 3 4 5 6 7 8 9 10 \
11 12 13
parm u 0.000000 1.000000 2.000000 3.000000  \
4.000000
end
# 1 element
4

1 回答 1

1

有多种方法可以将 NURBS 曲线的信息存储在波前 .obj 文件中。

这是一个例子:

v -2.300000 1.950000 1.000000 1.000000 
v -2.200000 0.790000 2.000000 1.000000 
v -2.340000 -1.510000 0.000000 1.000000 
v -1.530000 -1.490000 0.000000 1.000000 
v -0.720000 -1.470000 0.000000 1.000000 
v -0.780000 0.230000 0.000000 1.000000 

cstype rat bspline
deg 2
curv 0.00 1.00 1 2 3 4 5 6 
parm u 0.00 0.00 0.00 0.25 0.50 0.75 1.00 1.00 1.00  
end

现在让我们仔细看看。我们在笛卡尔坐标中有 6 个顶点,带有额外的权重坐标 (x, y, z, w)。要定义度数为 2 的有理 b 样条 (NURBS),我们必须设置

cstype rat bspline
deg 2

下一个值定义曲线。语法是:

curv [u-start] [u-end] [first-cp] [second-cp] [...]

http://www.martinreddy.net/gfx/3d/OBJ.spec,第 788 行:

曲线 u0 u1 v1 v2 。. .

自由形式几何的元素声明。

指定曲线、其参数范围及其控制顶点。尽管不能对曲线进行着色或渲染,但其他 Advanced Visualizer 程序也可以使用它们。

u0 是曲线的起始参数值。这是一个浮点数。

u1 是曲线的结束参数值。这是一个浮点数。

v 是控制点的顶点参考编号。您可以指定多个控制点。一条曲线至少需要两个控制点。

对于非有理曲线,控制点必须是 3D。对于有理曲线,控制点是 3D 或 4D。如果省略,第四个坐标(权重)默认为 1.0。

现在我们定义 u 向量/序列。这些值当然取决于您的几何形状。

parm u [knot1] [knot2] [...]

http://www.martinreddy.net/gfx/3d/OBJ.spec,第 1107 行:

参数 u p1 p2 p3。. .

参数 v p1 p2 p3 。. .

自由形式几何的主体声明。

指定全局参数值。对于 B 样条曲线和曲面,这指定了节点向量。

u 是参数值的 u 方向。

v 是参数值的 v 方向。

要设置 u 和 v 值,请使用单独的命令行。

p 是全局参数或节点值。您可以指定多个值。至少需要两个参数值。参数值必须单调增加。表面的类型和度数决定了所需值的数量。

我希望这有帮助!

于 2017-07-18T15:25:07.560 回答