Parsing 有没有办法解析LSL(林登脚本语言)中错误设置为180度的多个坐标脚本数据?
我在《第二人生》中使用LSL(林登脚本语言)。我已经导入了一个虚拟(网格)飞机对象,并花了数小时制作了各种部件的动画,如伞蓬和起落架 现在我发现,当所有轴都设置为零时,我应该将对象导入到面向东的方向(我的是面向西的)。现在,我已使用正确的方向重新导入对象,但是,由于主网格对象是我的“根prim”,并且存储每个动画部分的位置的帧都与此相对,因此所有动画部分(子prim)现在正好反转180度 是否有人知道我可以解析脚本数据以查找并自动添加180度修正的方法 我花了几个小时在动画上,有很多页的数据,所以一个自动化的解决方案将是非常可取的,任何帮助都会得到感激 下面是我需要解析的代码片段:Parsing 有没有办法解析LSL(林登脚本语言)中错误设置为180度的多个坐标脚本数据?,parsing,linden-scripting-language,Parsing,Linden Scripting Language,我在《第二人生》中使用LSL(林登脚本语言)。我已经导入了一个虚拟(网格)飞机对象,并花了数小时制作了各种部件的动画,如伞蓬和起落架 现在我发现,当所有轴都设置为零时,我应该将对象导入到面向东的方向(我的是面向西的)。现在,我已使用正确的方向重新导入对象,但是,由于主网格对象是我的“根prim”,并且存储每个动画部分的位置的帧都与此相对,因此所有动画部分(子prim)现在正好反转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>
]);
link\u消息(整数n、整数c、字符串m、密钥id){
向量lSize=llList2Vector(llgetlinkprimitives参数(1[7]),0);
如果(m==lAnimName+“|0”){//帧0。
如果(lLeg3t)
llSetLinkPrimitiveParamsFast(lLeg3t[
33, 29,
]);
如果(lWire3t)
llSetLinkPrimitiveParamsFast(lWire3t[
33, 29,
]);
如果(lWire3b)
llSetLinkPrimitiveParamsFast(lWire3b[
33, 29,
]);
如果(lFoot3)
llSetLinkPrimitiveParamsFast(lFoot3[
33, 29,
]);
如果(lLeg3b)
llSetLinkPrimitiveParamsFast(lLeg3b[
33, 29,
]);
如果(lSled3)
llSetLinkPrimitiveParamsFast(lSled3[
33, 29,
]);
if(lWire2t)
llSetLinkPrimitiveParamsFast(lWire2t[
33, 29,
]);
如果(lLeg2t)
llSetLinkPrimitiveParamsFast(lLeg2t[
33, 29,
]);
如果(lWire2b)
llSetLinkPrimitiveParamsFast(lWire2b[
33, 29,
]);
我不是编剧,但我想我有点明白发生了什么
尝试此操作-在Blender中导入您的车辆。选择所有零件,确保您的车辆朝向正确的方向。如果没有,请按R,然后按Z,然后按您希望其旋转的度数,然后输入
一旦车辆朝向正确的方向。点击Ctrl-A并在弹出菜单中选择“旋转”。这会将旋转数据全部重置为0。导出对象并上载。重新缩放对象时,您会发现所有零件的旋转现在都设置为0
如果我正确理解您的quandry,那么应该解决子prims的旋转问题
如果不是……看看当编写noob脚本试图提供帮助时会发生什么?=/我不是脚本编写者,但我想我有点了解发生了什么 尝试此操作-在Blender中导入您的车辆。选择所有零件,确保您的车辆朝向正确的方向。如果没有,请按R,然后按Z,然后按您希望其旋转的度数,然后输入 一旦车辆朝向正确的方向。点击Ctrl-A并在弹出菜单中选择“旋转”。这会将旋转数据全部重置为0。导出对象并上载。重新缩放对象时,您会发现所有零件的旋转现在都设置为0 如果我正确理解您的quandry,那么应该解决子prims的旋转问题
如果没有…看到编写noob脚本试图提供帮助时会发生什么吗?=/我记得如果在任何一个非零四元数组件上翻转符号,它将翻转旋转180度 所以
if(lLeg3b)
llSetLinkPrimitiveParamsFast(lLeg3b[
33, 29,
]);
变成:
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, 29,
]);
我记得,如果你在任何一个非零四元数分量上翻转符号,它将翻转旋转180度
所以
if(lLeg3b)
llSetLinkPrimitiveParamsFast(lLeg3b[
33, 29,
]);
变成:
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, 29,
]);
对于未来,请使用标志名称而不是其值。这会使代码更难阅读(LINK_ROOT、PRIM_SIZE、PRIM_POS_LOCAL和PRIM_ROT_LOCAL),并且不会带来性能成本。对于未来,请使用标志名称而不是其值。这会使代码更难阅读(LINK_ROOT、PRIM_SIZE、PRIM_POS_LOCAL和PRIM_ROT_LOCAL)而且没有性能成本。