有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Android OpenGLES骨骼动画问题

我在安卓中的OpenGLES应用程序中实现骨骼动画时遇到问题。 对于模型,我使用assimp转换使用3ds max导出的FBX文件,并将其转换为文本文件。该文件加载骨骼数据(顶点、权重、偏移矩阵、继承人等)

如果我将骨骼矩阵作为身份矩阵发送,则可以获得绑定姿势:

enter image description here

然后我存储每个节点的子节点,并使用此代码递归地将节点转换矩阵乘以它们的父节点

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是以下结果:

enter image description here

我认为我的骨骼重量和ID是正确的,因为我知道: i、 堆叠。伊姆古尔。com/fcTro。巴布亚新几内亚 当我翻译一个变换矩阵时

我试着跟着奥格尔德夫。org/www/tutorial38/tutorial38。html教程

现在我不知道在哪里寻找错误

读取矩阵时有问题吗?还是计算有问题


共 (1) 个答案

  1. # 1 楼答案

    我在尝试了许多矩阵乘法组合后解决了这个问题

    1. 首先,我从FBX切换到Collada文件格式,然后将其转换为我自己的格式
    2. 从assimp加载矩阵后立即对其进行转置(我在将其加载到着色器时对其进行转置)
    3. 我没有使用从assimp加载的节点变换进行乘法,而是使用动画节点的平移、旋转和缩放向量创建了一个矩阵

    我不完全理解它是否将其改为Collada有帮助,但谷歌搜索表明人们对FBX格式有问题