2015-02-11 56 views
2

我試圖使用Assimp 3.1.1加載和渲染一些操縱模型。因此,我已經在aiNode的層次結構中標識了aiBone。 對於每個aiBone,我有它的轉換(TRS)w.r.t.給父母。使用Assimp導入時確定骨骼長度

我的問題是,我怎樣才能確定每個骨骼的長度? 假設連接的骨架,這對大多數骨骼來說都不是問題,除了葉骨。 假設我有以下骨架結構: b0 - > b1 - > b2 其中b0是根骨,b2是葉骨。我怎麼知道b2的長度(因爲我只有它的變換w.r.t. b1)?

謝謝!

+0

我有類似的困難,不要認爲你解決了這個問題嗎? – 2015-03-28 22:10:30

回答

1

因此,經過一點挖掘.. ISTM,沒有任何隱含的方式知道葉骨應該終止。

下面的代碼註釋是從Ogre3D wiki引用的(這不是assimp,但我們在這裏討論相同的問題)。

if(numChildren == 0) 
{ 
    // There are no children, but we should still represent the bone 
    // Creates a bone of length 1 for leaf bones (bones without children) 
    // ... 
} 

我想你可以考慮嘗試計算葉骨的長度,通過計算從骨的距離,你渲染網格的邊緣..儘管這可能比更麻煩的價值。

2

儘管大多數SDK和遊戲引擎都將骨骼定義爲骨骼,但這不正確。它實際上有關節。骨骼是關節之間的隱含連接。當你這樣看時,你會意識到所有的骨頭都有一定的長度,而且沒有骨頭伸過葉片關節。

具有關節替換的例子:

J0 ---B0---> J1 ---B1---> J2 

B0是J0和J1之間的骨和B1是J1和J2之間的骨。