3

我的 C++ 程序需要访问在 3ds Max (2011) 中构建的 3D 样条线。我找到了一个简单的 maxscript将这些样条线导出为 XML 文件 - 示例如下:

<spline name='Line001' knots='5' closed='true'>
<knot x='-4.67297e-005' y='0.0' z='0.0'>
    <invec x='-0.000144482' y='-600.0' z='-1.52588e-005' />
    <outvec x='5.10227e-005' y='600.0' z='1.52588e-005' />
</knot>
<knot x='6.17511e-005' y='800.0' z='500.0'>
    <invec x='7.92357e-005' y='800.0' z='100.0' />
    <outvec x='4.42666e-005' y='800.0' z='900.0' />
</knot>
<knot x='-66.0574' y='1000.0' z='900.0'>
    <invec x='-66.0574' y='700.0' z='900.0' />
    <outvec x='-66.0573' y='1300.0' z='900.0' />
</knot>
<knot x='323.651' y='1300.0' z='4.57764e-005'>
    <invec x='323.651' y='1600.0' z='200.0' />
    <outvec x='323.651' y='1000.0' z='-200.0' />
</knot>
<knot x='-0.000152032' y='-700.0' z='-200.0'>
    <invec x='-0.00014329' y='-700.0' z='-400.0' />
    <outvec x='-0.000160774' y='-700.0' z='-1.52588e-005' />
</knot>
</spline>

我的问题是——在我的 C++ 程序中访问和评估这个样条曲线的最简单(也是最轻量级)的方法是什么?我知道如何解析数据的 XML,但从那时起我现在迷路了。我需要能够a)沿着这个 3D 样条评估一个点,然后b)计算一个向量来描述这个点的切线(如果可能的话)。我知道有可用于此类事情的库,但我不确定哪个最合适 - 特别是就上述格式而言(结,每个都有一个 invec 和 outvec)。

4

1 回答 1

1

由于 3ds Max 已经在计算这些曲线,您可以将“烘焙”曲线以您需要的分辨率导出到 XML,我猜这将是每帧一个点。

如果您更喜欢评估应用程序中的曲线,那么贝塞尔曲线(我猜是这些曲线)在没有外部库帮助的情况下很容易计算。看看维基百科上的De Casteljau 算法,特别是描述几何解释的部分,这比公式更容易掌握。

于 2011-11-29T07:09:25.313 回答