assimp を使用して、キー フレーム間を補間することにより、スキン モデルのアニメーションを読み込むことができました。現在、アニメーション ファイルからボーンをロードするのではなく、ユーザー定義の変換マトリックスからボーンの方向または配置を試みています。同様に、角度がユーザーによって指定される特定の角度で腕を回転させます。モデルを次のようにバインド ポーズでロードしました。
void recursion(aiNode* gNode)
{
std::string gNodeName(gNode->mName.data);
if(boneMapping.find(gNodeName) != boneMapping.end())
{
//if node corresponds to a bone,
Matrix4f boneMatrix = IdentityMatrix;
aiNode* tempNode = gNode;
//find combined transform of a bone
while(tempNode != NULL)
{
Matrix4f NodeMatrix(tempNode->mTransformation);
boneMatrix = NodeMatrix * boneMatrix;
tempNode = tempNode->mParent;
}
pBoneData[boneId].FinalTransform = GlobalInverseTransform * boneMatrix * pBoneData[boneId].OffsetMatrix;
}
for(int i = 0; i < gNode->mNumChildren; i++)
{ //repeat this process for child nodes
recursion(gNode->mChildren[i]);
}
}
変換マトリックスを使用してモデルのメッシュの 1 つを方向付けるために、メッシュの親ボーンに対応するボーンの名前を検索して、そのノード マトリックスを必要なマトリックスに置き換えてみました。しかし、別のメッシュでボーンを変形させたため、まったく機能しませんでした。
右のモデルは T ポーズで、首のボーンを 45 度回転させて修正するつもりでしたが、そのままで左のモデルのように脚の部分が変形してしまいました。そのため、既存の記事や回答へのリンクは非常に役立ちます。