我在Android中的OpenGLES应用程序中实现骨骼动画时遇到了麻烦。 对于模型,我使用assimp转换用3ds max导出的FBX文件并将其转换为文本文件。此文件加载骨骼数据(顶点,权重,偏移矩阵,层次等)
如果我将骨骼矩阵作为身份矩阵发送,我可以得到绑定姿势:
然后我存储每个节点的子节点并使用此代码递归地将节点转换矩阵乘以其父节点
public void setBoneHeirarchy()
{
for (Bone b : mRootBones)
{
setBoneTransformations(b, mRootTransform);//From assimp aiScene->mRootNode->mTransformation
}
}
private void setBoneTransformations(Bone b, Matrix4 parent)
{
Matrix4 globalTransform = new Matrix4();
globalTransform.multMatrix(parent); //[this].multMatrix([arg]) multiplies the matrix like [this] = [this] * [arg]
globalTransform.multMatrix(b.nodeTransformation); //loaded from assimp as aiNode->mTransformation
b.transformation.loadIdentity(); //the final transformation to return
b.transformation.multMatrix(mRootTransformInverse); //Inverse of mRootNode->mTransformation
b.transformation.multMatrix(globalTransform); //calculated above
b.transformation.multMatrix(b.offsetMatrix); //read from text file (converted with assimp)
for (Bone child: b.children)
setBoneTransformations(child, globalTransform);
}
这个blob就是结果:
我认为我的骨骼重量和ids是正确的,因为我得到了这个: i.stack.imgur.com/fcTro.png 当我翻译其中一个转换矩阵时
我试图关注ogldev.org/www/tutorial38/tutorial38.html教程
现在我不知道在哪里寻找错误
阅读矩阵是否有问题,还是计算?
答案 0 :(得分:0)
我在尝试了许多矩阵乘法组合后解决了这个问题
我不完全理解它是否将其更改为Collada有帮助与否,但谷歌搜索表明人们有FBX格式的问题。