首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Android OpenGLES骨骼动画问题

Android OpenGLES骨骼动画问题
EN

Stack Overflow用户
提问于 2017-05-02 14:09:26
回答 1查看 223关注 0票数 2

我在安卓的OpenGLES应用程序中实现骨骼动画时遇到了麻烦。对于模型,我使用assimp来转换一个用3ds max导出的FBX文件,并将其转换为文本文件。此文件加载骨骼数据(顶点、权重、偏移矩阵、层次结构等)。

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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是这样的结果:

我认为我的骨骼权重和i是正确的,因为当我转换其中一个转换矩阵时,得到的结果是: i.stack.imgur.com/fcTro.png

我正在尝试使用ogldev.org/www/tutorial38/tutorial38.html教程

现在我不知道该去哪里找错误

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

EN

回答 1

Stack Overflow用户

发布于 2017-05-10 10:02:56

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

首先,我从FBX切换到Collada文件格式,然后转换成我自己的矩阵后,从assimp加载它的矩阵(我正在转置它,同时加载到乘法的shader)

  • Instead的节点变换加载从assimp,我创建了一个矩阵,从动画节点的平移,旋转和缩放矢量

我不完全明白是不是把它改成了Collada,这是否有帮助,但谷歌搜索显示,人们对FBX格式有问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43740035

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文