2011-03-07 74 views
0

合雅 我目前正在研究我的學位最後一年項目,這是2部分A)創建一個好的3D引擎和B)在它內部實現一個IK系統並評估幾種類型的IK求解。 CCD(循環座標下降)是我開始的地方,並且遇到了問題。我已經使用了很多來源來嘗試和IK的握手,特別是當涉及到CCD我已經使用源代碼作爲一個基地可在這裏:http://www.darwin3d.com/gdm1998.htmCCD反向運動學問題

在我開始發佈我的源代碼之前,希望我的問題是某個人以前遇到過的明顯或簡單的事情。 這裏是一個簡短的視頻顯示的問題:http://www.youtube.com/watch?v=XtU8rFR-DuE

顯然它是不正確的,IK旋轉,一般似乎很混亂! 如果目標保持靜止,那麼它收斂良好,但即使是最小的運動(由於目標是由我的引擎中的基於紅外線的運動捕捉驅動的,所以在該系統中發生很多運動),並且似乎重新計算並再次開始旋轉。

此外,當關節超出範圍時,您會假設採用CCD技術後,關節將全部指向目標並剛剛達到循環限制,但您仍然可以以正確的方式使用IK目標,但是如果目標超出範圍,則視頻中顯而易見,IK再次坐在迭代中並旋轉。

如果有人能幫助我會真的!欣賞它。 如果需要更多的信息(代碼等),然後隨意問。

在此先感謝 克里斯

的東西可能是錯誤的

回答

0

萬噸;你必須調試你的程序。

對於每個關節:

  1. 檢索目標位置target和端部執行器的位置end
  2. 計算新聯合值q,知道聯合變換。
  3. 計算新聯合值q的末端執行器位置endNew

如果從endtarget的距離比從endNewtarget的距離越小,你發現了一個bug(所有紡紗是錯誤的)。無論是在選擇q在2中的bug還是在計算末端效應器位置1和3.

我不願意使用其他人的隨機示例代碼(or even my own)。蘭德例如寫

CrossProduct(&curVector, &targetVector, &crossResult); 
NormalizeVector(&crossResult); 

,但我們相信,這將不被零與一師崩潰(比方說,如果curVector = -targetVector)?

如果關節是旋轉的(而不是蘭德爾的例子中的球形),那麼請參閱Lander的數學參考文獻中的Wang &。