2017-04-21 69 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 
) 

很高興收到任何有關此優化或建設性改進的意見。

謝謝。