在c++程序中评估从max导出的3d样条曲线

Evaluating 3d splines exported from max in a C++ program

本文关键字:3d 样条曲线 max c++ 程序 评估      更新时间:2023-10-16

我的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)。

因为3ds Max已经在计算这些曲线了,你可以将"烘烤"曲线导出为XML格式,你需要它们的分辨率,我猜将是每帧一个点。

如果您更喜欢评估应用程序中的曲线,那么bsamzier曲线(我猜这些是)非常容易计算,而无需外部库的帮助。看看维基百科上的De Casteljau算法,特别是描述几何解释的部分,这比公式更容易掌握。