2017-04-21 45 views
0

我有一个三维地球仪,每个国家都是单独的网格。 我正在编写3D Max中的一个脚本,该脚本可以自动对齐枢轴。Maxscript - 对齐选择的网格垂直于网格枢轴

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

这部分没有问题。不过,我正在把它带入Unity,并且希望为这些支点中的每一个定位一个游戏对象。为了让这个外观美观,每个网格的枢轴应该垂直。

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

我以为得到numFaces并除以2会给出一个合适的位置和旋转对齐,但不幸的是,中途多边形不够接近网格中心。

我想知道有没有办法做到这一点,通过选择网格中最接近的多边形到整体支点,或者可以通过与新创建的网格的交点选择中心多边形。

也许我很困难。

会有人有任何意见可以让我在正确的方向吗?

谢谢。

回答

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 
) 

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

谢谢。