Maxscript - 对齐选择的网格枢轴垂直于网格

Maxscript - align selection of meshs pivots perpendicular to mesh

我有一个 3D 地球仪,每个国家都是单独的网格。 我正在 3D Max 中编写脚本,自动将枢轴居中。

for all in selection do(all.pivot = all.center)

这部分很好。但是,我将其带入 Unity 并希望将游戏对象定位到这些枢轴中的每一个。为了让这个看起来美观,每个网格的枢轴应该是垂直的。

现在我一直在网上寻找解决方案的方向,我一直在努力-也许是误解。

我认为获取 numFaces 并将其除以 2 会给出适当的位置和旋转对齐,但不幸的是,中间多边形离网格中心不够近。

我想知道是否有一种方法可以通过选择网格中最接近整体枢轴的多边形或者通过与新创建的网格的交点选择中心多边形来实现这一点。

也许我把这个复杂化了。

任何人都可以提供任何意见让我朝着正确的方向前进吗?

谢谢。

好吧,我在用头撞了一下之后就明白了。解决方案 'for me' 是由球形地球海洋的枢轴点提供的。通过找Joker Martini提供的一个问题,为每个mesh的每个pivot设计一个lookAt,看一个target(以球形世界水为中心的pivot),然后通过学习objectoffsetrot,通过rotation翻转pivot。

这里是因为它可能对某人有用。

for all in selection do(

    one =  all
    target = $'Globe Sea'
    pivotLookAt one two
    RotatePivotOnly one ((eulerangles 0 180 0) as quat)

    )


 fn pivotLookAt obj target = 
 (
 ResetXForm obj
 old_tm = obj.transform
 obj.dir = normalize (target.pos - obj.pos)
 obj.objectOffsetRot = old_tm * (inverse obj.transform)

 )

 fn RotatePivotOnly obj rotation = 
 ( 
 local rotValInv = inverse (rotation as quat)
 animate off in coordsys local obj.rotation *= RotValInv
 obj.objectoffsetrot*=RotValInv
 obj.objectoffsetpos*=RotValInv
 )

很高兴听到有关优化或建设性改进的任何意见。

谢谢。