1

我在第二人生中使用 LSL(林登脚本语言)。我已经导入了一个虚拟(网状)飞机对象,并花费了数小时制作各种部件的动画,例如机盖和起落架。

我现在发现,当所有轴都设置为零时(我的对象朝西),我应该将对象导入朝东。我现在已经以正确的方向重新导入了对象,但是由于主网格对象是我的“根 prim”,并且存储每个动画部分位置的帧都与之相关,因此所有动画部分(子 prims)现在都是正好反转 180 度。

有谁知道我可以解析脚本数据以查找并自动添加 180 度校正的方法?

我在动画上花费了数小时并拥有数页数据,因此自动化解决方案将是非常可取的,并且非常感谢任何帮助。

我需要解析的代码片段如下所示:

    link_message(integer n, integer c, string m, key id){
    vector lSize = llList2Vector(llGetLinkPrimitiveParams(1,[7]),0);
    if(m == lAnimName + "|0"){// Frame 0.

        if(lLeg3t)
            llSetLinkPrimitiveParamsFast(lLeg3t,[

                33, <0.245628*lSize.x, -0.183868*lSize.y, -0.184195*lSize.z>, 29, <-0.500000, 0.000000, -0.707107, 0.500000>

            ]);

        if(lWire3t)
            llSetLinkPrimitiveParamsFast(lWire3t,[

                33, <0.259854*lSize.x, -0.187642*lSize.y, -0.196354*lSize.z>, 29, <-0.500000, 0.000000, -0.707107, 0.500000>

            ]);

        if(lWire3b)
            llSetLinkPrimitiveParamsFast(lWire3b,[

                33, <0.244813*lSize.x, -0.194661*lSize.y, -0.171052*lSize.z>, 29, <0.073912, -0.549525, -0.444997, 0.703233>

            ]);

        if(lFoot3)
            llSetLinkPrimitiveParamsFast(lFoot3,[

                33, <0.261851*lSize.x, -0.180508*lSize.y, -0.157508*lSize.z>, 29, <-0.270598, -0.270598, -0.653282, 0.653282>

            ]);

        if(lLeg3b)
            llSetLinkPrimitiveParamsFast(lLeg3b,[

                33, <0.247470*lSize.x, -0.200321*lSize.y, -0.190136*lSize.z>, 29, <0.073912, -0.549525, -0.444997, 0.703233>

            ]);

        if(lSled3)
            llSetLinkPrimitiveParamsFast(lSled3,[

                33, <0.251954*lSize.x, -0.184123*lSize.y, -0.169543*lSize.z>, 29, <0.000000, 0.000000, -0.707107, 0.707107>

            ]);

        if(lWire2t)
            llSetLinkPrimitiveParamsFast(lWire2t,[

                33, <0.268535*lSize.x, 0.190722*lSize.y, -0.196969*lSize.z>, 29, <-0.061628, 0.541675, -0.454520, 0.704416>

            ]);

        if(lLeg2t)
            llSetLinkPrimitiveParamsFast(lLeg2t,[

                33, <0.255244*lSize.x, 0.185132*lSize.y, -0.176223*lSize.z>, 29, <-0.061628, 0.541675, -0.454520, 0.704416>

            ]);

        if(lWire2b)
            llSetLinkPrimitiveParamsFast(lWire2b,[

                33, <0.237334*lSize.x, 0.180499*lSize.y, -0.159385*lSize.z>, 29, <0.517145, -0.024678, -0.706676, 0.482246>

            ]);
4

2 回答 2

0

我不是脚本编写者,但我想我有点明白发生了什么......

试试这个 - 在 Blender 中导入你的车辆。选择所有零件,确保您的车辆朝向正确的方向。如果不是,请按 R,然后按 Z,然后按您希望它旋转的度数,然后按 Enter。

一旦车辆朝向正确的方向。点击 Ctrl-A 并在弹出菜单中选择“旋转”。这会将旋转数据全部重置为 0。导出对象并上传。当你重新调整它时,你会发现所有部分的旋转现在都设置为 0。

如果我正确理解了您的疑问,那应该可以解决儿童 prims 的旋转问题吗?

如果不是...看看脚本新手尝试提供帮助时会发生什么?=/

于 2016-03-05T19:58:49.330 回答
0

我的回忆是,如果您翻转任何单个非零四元数组件上的符号,它将旋转 180 度。

所以...

   if(lLeg3b)
        llSetLinkPrimitiveParamsFast(lLeg3b,[

            33, <0.247470*lSize.x, -0.200321*lSize.y, -0.190136*lSize.z>, 29, <0.073912, -0.549525, -0.444997, 0.703233>

        ]);

变成:

    if(lLeg3b)
        llSetLinkPrimitiveParamsFast(lLeg3b,[

            33, <0.247470*lSize.x, -0.200321*lSize.y, -0.190136*lSize.z>, 29, <-0.073912, -0.549525, -0.444997, 0.703233>

        ]);
于 2016-05-02T01:30:53.017 回答