【问题标题】:Evaluating 3d splines exported from max in a C++ program在 C++ 程序中评估从 max 导出的 3d 样条线
【发布时间】:2012-01-08 13:43:04
【问题描述】:

我的 C++ 程序需要访问在 3ds Max (2011) 中构建的 3D 样条线。 I have found a simple 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)。

【问题讨论】:

    标签: c++ math 3dsmax spline


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢,“烘焙”曲线的想法实际上是一个很好的想法,但最后我决定按照你的建议使用 De Casteljau 的算法实时计算曲线。
    猜你喜欢
    • 1970-01-01
    • 2014-03-26
    • 2011-05-19
    • 1970-01-01
    • 2019-03-02
    • 2015-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多