我一直在嘗試使用ASSIMP導入模型來實現我自己的3D的openGL/C++遊戲引擎骨骼動畫骨骼動畫。與ASSIMP
我認爲這個問題是由骨基質的計算引起的,因爲如果我把它們分配給身份,網格在其綁定加載姿勢加載着色器中統一變量。
這些都是我用來初始化和計算準備骨基質的功能:
void Joint::AddToSceneGraph(GameObject* root)
{
GameObject* parent = root->FindChild(m_name);
//m_globalInverseMatrix = inverse(root->GetTransform().GetMatrix());
parent->AddComponent(this);
while (parent->GetParent() != root)
parent = parent->GetParent();
parent->GetTransform().SetParent(NULL); (1)
}
mat4 Joint::GetMatrix()
{
mat4 ans = /*m_globalInverseMatrix*/GetTransform().GetMatrix()*m_offsetMatrix;
return ans;
}
因爲我試圖呈現其綁定的模特造型,我不會爲您提供計算動畫矩陣的代碼。
一些說明 - 我有一個Transform類,它具有Transform * parent,其GetMatrix()方法從父級的方法計算矩陣,縮放和平移vec3s和旋轉四元數,以便考慮父級和子級之間的關係。我假設父節點的根聯合變換必須是NULL,因此它的矩陣身份,這是(1)的目的。雖然我不確定這個假設,但我確定具有骨架根節點和包含網格的節點是兄弟節點。
而且我不知道天氣我應該使用m_globalInverseMatrix
,此外,究竟是它的目的。
總的來說,我認爲我的主要問題是誤解ASSIMP如何計算offset matrix
或所謂的inverse bind pose matrix
以及如何反轉其效果。這個問題導致了「包裝」本身的模型看: