我在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>
]);
答案 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>
]);