有没有办法解析多个坐标脚本数据在LSL(Linden Scripting Language)中错误地设置错误180度?

时间:2016-03-04 20:45:18

标签: parsing linden-scripting-language

我在Second Life中使用LSL(Linden Scripting Language)。我已经导入了一个虚拟(网状)飞机物体,花了几个小时制作各种部件,如遮篷和底盘。

我现在发现,当所有轴都设置为零时,我应该将对象导入到东面(我的面朝西)。我现在已经以正确的方向重新导入了对象,但是因为主要的网格对象是我的'root 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>

            ]);

2 个答案:

答案 0 :(得分:0)

我不是脚本编写者,但我认为我有点得到了正在发生的事情......

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

一旦车辆朝向正确的方向。按Ctrl-A并在弹出菜单中选择“旋转”。这会将旋转数据全部重置为0.导出对象并上载它。你会发现,当你把所有部件的旋转设置为0时,它就会显示出来。

如果我理解你的问题,应该解决儿童prims的轮换问题?

如果没有...看看脚本编写新手时会发生什么情况? = /

答案 1 :(得分: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>

        ]);