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

时间:2017-04-21 12:08:18

标签: 3d maxscript

我有一个3D Globe,每个国家都是单独的网格。 我正在使用3D Max编写脚本,自动化枢轴中心。

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

这部分没问题。然而,我将这个带入Unity,并希望将游戏对象定位到这些枢轴中。为了使这个看起来美观,每个网格的枢轴应垂直。

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

我认为获得numFaces并将其除以2会得到一个合适的位置和旋转对齐,但不幸的是,中间多边形不足以接近网格中心。

我想知道有没有办法通过选择网格中最接近整体枢轴的多边形,或者通过与新创建的网格交叉选择中心多边形来实现此目的。

也许我让这很复杂。

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

谢谢。

1 个答案:

答案 0 :(得分:0)

好的我在经过一些头撞后想通了。解决方案对我来说'由球形地球的海洋的枢轴点提供。通过找到Joker Martini提供的问题,为每个网格的每个枢轴设计一个lookAt来查看目标(中心的球形世界水的枢轴),然后通过了解objectoffsetrot翻转旋转枢轴。

这可能对某人有用。

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
 )

很高兴听到有关此问题的任何意见,以便进行优化或改进建设。

谢谢。