2009-02-01 42 views
1

好的,所以 - 這與我以前的問題Transforming an object between two coordinate spaces有很大關係,但是更直接,它應該有一個明顯的答案。跟蹤一個對象的局部座標空間

一個對象的局部座標空間,我該如何「抓住它」?假設我將Orc加載到我的遊戲中,我如何通過編程方式知道它的頭部,左臂,右臂和原點(肚臍?)是?當我知道它在哪裏時,我需要手動保存還是在DirectX API中奇蹟般地存在?在我的另一個問題中,有人說過一些關於存儲X,Y,Z方向和起點的頂點?我如何找到這些頂點?我是否可以隨意挑選它們,將它們分配到模型中,然後將其加載到我的遊戲中?等

這不是座標空間之間轉換

回答

4

其實,這是座標空間約轉化。

好吧,你明白你可以有一個矩陣,做翻譯或旋轉。 (或縮放或偏斜等)您可以將這樣的矩陣乘以點(V)以獲得新的(平移/旋轉/等)點。例如: -

Mtranlate = [ 1 0 0 Tx ] * V = [ Vx ] = [ Vx + Tx ] 
      [ 0 1 0 Ty ]   [ Vy ]  [ Vy + Ty ] 
      [ 0 0 1 Tz ]   [ Vz ]  [ Vz + Tz ] 
      [ 0 0 0 1 ]   [ 1 ]  [ 1  ] 

或者繞X旋轉/ Y/Z軸:

Mrotate_x = [ 1 0  0 0 ] * V = [ Vx ] = [ Vx    ] 
      [ 0 cos -sin 0 ]   [ Vy ]  [ Vy*cos - Vz*sin ] 
      [ 0 sin cos 0 ]   [ Vz ]  [ Vy*sin + Vz*cos ] 
      [ 0 0  0 1 ]   [ 1 ]  [ 1    ] 

,您可以通過矩陣相乘相結合多個操作。
例如:Mnew = Mtranslate * Mrotate_x。
(是的,順序並不重要!)

所以給現實世界的基礎起源,可以翻譯成你(稱爲/提供)獸人的XY座標,從該點的地形推斷出你的獸人的腳的z位置是,並翻譯爲。現在,你在全局座標中擁有你的獸人的「腳」。從那裏,你可能想旋轉你的獸人,所以他面臨着一個特定的方向。

然後向上翻譯(根據你的獸人模型)找到它的脖子。從脖子上,我們可以向上翻轉(也許旋轉)找到它的頭部或者過頭去找到它的肩膀。從肩膀上,我們可以旋轉並翻譯找到肘部。從肘部我們可以旋轉並翻譯來找到手。

您的獸人模型的每個組件都有一個本地參考框架。每個都與參考框架相關,它通過一個或多個變換(矩陣)附加。通過乘以所有局部矩陣(變換),我們最終可以看到如何從獸人的腳走到他的手。

(請注意,我會動畫的獸人,只是用他的腳X,Y,Z的位置。否則,它的工作太多了。)

您在機器人其中可以看到很多這樣的事情的爲正向運動學提供了一個很好的基本介紹。在機器人技術中,至少用簡單的機器人來說,你有一個旋轉的電機和一個可以平移的肢體長度。然後還有另一臺電機。 (相比之下,人的肩關節可繞一次所有三個軸。)

你可能look over the course HANDOUTS for CMU's Robotic Manipulation class (15-384).

也許類似的Forward Kinematics Intro