基于Assimp的骨骼动画实现

本文详细记录了使用assimp加载FBX模型骨骼动画的实际经验,包括解决常见问题如模型导入失败、骨骼插槽数量不足及矩阵转换等,通过实战案例分享了如何避免和解决这些问题。
Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

原文链接:http://www.nicemxp.com/articles/31 

emmm...模型资源是在淘宝花5个大洋买的。实际有很多模型,带动画的只有6个,实际最后用3DMax导出fbx的模型assimp只有两个加载出来是正常的。感觉assimp加载fbx不太友好,网上也有很多人有这种情况(不知道是不是自己写的代码有问题)。

 

  assimp加载骨骼动画网上有很详细的教程,地址:http://ogldev.org,tutorial38。

  这里只说下自己踩了坑的地方:

  首先创建assimp的导入对象Assimp::Importer importer,这个导入对象不要在栈区创建,因为栈区创建的局部对象析构后,importer会把它加载的aiScene* scene 对象一起释放了,但是计算插值骨骼信息是需要保存aiScene指针的。

  其次就是教程中每个顶点有4个骨骼插槽,测试教程中的模型没有问题,但是实际很多模型4个骨骼是不够的,比如自己测试的王昭君和李白模型,测试的时候各种乱各种蒙各种调,最后拓展成了16个骨骼插槽。

  然后就是教程中直接用的是assimp库的矩阵,assimp库的矩阵对象是行主序,而自己程序也是行矩阵,但是但是但是,assimp的矩阵变换的规则是 Matrix * vector,来变换向量的,而自己工程中的是vector * matrix来变换,所以就有坑了,而且这个坑还不太好发现,所以就是要想在自己工程中用,需要把assimp中存储的矩阵都转置下。当然这个要看自己的math库的矩阵规则有关系,行列主序,变换规则。

  *************************

  好吧,piapia自己打脸,我写这条的时候我又检查了下转置,发现有一个矩阵漏掉了,改好后所有模型动画都没问题了。我还把原因归结于assimp加载fbx有问题,羞愧。

  果然记录博客是真有用呀,要不然我可能以后也发现不了这个问题。/手动捂脸

  *************************

  emmm...感觉趟过的坑就这些吧。然后再就是说说对教程的看法。

  教程中的骨骼动画难理解的地方就在于各种矩阵变换,实际它讲的远没有代码写得明白,所以直接看他的源码就会明白。

  assimp每个骨骼关节保存了顶点从模型空间到骨骼空间的变换矩阵记作Mbone,所以计算最终的变换矩阵时,需要用单位矩阵先乘以这个Mbone,然后在骨骼空间中就可以随着骨骼在每一帧进行变换了,先乘当前骨骼的变换矩阵然后递归乘父亲骨骼,爷爷骨骼。。。等等向上递归到根节点。而每一层级的骨骼变换矩阵都应该按照 Mscale * Mrotation * Mtransformation这个顺序生成,就是相对空间向绝对(世界)空间的变换。

  实际教程中记录根节点的变换矩阵并求逆保存了,emmm...没感觉到用处,自己的想法是为了递归时跟根节点的矩阵中和,变成了单位矩阵,保证根节点为单位矩阵?自己没有按照教程做这步,自己直接写死了根节点单位矩阵。

  差不多就这些吧,写的乱糟糟,没白写,哈哈,找到自己的问题了。

 

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

课程简介:本课程详细讲解基于Assimp C++库的模型读取模块,并且做了关于动画理论、关键帧插值、骨骼动画矩阵原理、骨骼动画读取与播放等知识的详细讲解,对于游戏行业或者三维可视化从业人员会有比较大的帮助。目前很多公司已经开始构建自己的底层图形引擎,其中动画就是重要的一个版块,本课程可以让学员从原理层面以及底层代码层面了解FBX、OBJ模型的读取本质,并且梳理程序架构,编写骨骼动画。2 课程解决优势:很多同学学习骨骼动画苦于无法找到详细的资料,其中卡主的问题点也比比皆是,比如FBX内嵌材质的读取,骨骼动画各类矩阵的应用,理论结合模型读取库读出来的数据如何一一对应等。我们的课程可以带领大家从原理+实践的角度进行学习,每一个知识点都会:a 推导基础公式及原理 b 一行一行进行代码实践从而能够保证每位同学都学有所得,能够看得懂,学得会,用得上,并且能够培养自主研究的能力。3 学习课程所得:学习本课程完毕之后,学员可以全方位的完全了解基于Assimp库的模型读取结构,了解每一个变量背后的含义,并且课程拥有随堂附赠的源代码,保证同学可以随时根据老师的代码纠正自己的错误。跟随课程一行一行写完代码的同学,可以获得自己的模型读取代码库,并且深度理解骨骼动画的原理与模型读取原理 本课程含有全源代码
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值