骨骼动画的实现(OpenGL实现)

人物模型动画一直是游戏中最重要的组成部分, 因此这里我们研究骨骼动画是如何实现的.

原理

首先模型通常是由多个三角形形成的网格构成, 每个三角形有三个顶点, 因此动画的根本原理就在于不同时间内为每个顶点分配不同的位置, 这一切都是通过虚拟的骨头(bone)实现的. 其中模型上的每个顶点分配给不同的骨头, 比如说, 手部上的顶点可能分配给前臂, 手部两个不同的骨头, 每个骨头对不同顶点有不同的影响, 这通过权重值来实现的.

而后动画分为多个帧, 每一帧内, 多个骨头位于不同的位置, 就和人体一样. 最重要的是, 骨骼上的骨头是有层次的, 比如一般情况骨椎为根骨头, 而后派生出头部骨头, 手臂骨头, 腿部骨头.

实现

为了实现动画, 我们需要得到骨头在不同帧内变换矩阵, 而后我们模型上的顶点首先要变换至骨头所在的模型空间, 而后再乘以其相应的变换矩阵. 关键实现时需要注意求解每个骨头初始状态其自身模型坐标系的逆矩阵.
这里我是用的是 Ogre 的骨骼动画机制, 发现其骨骼加载的过程需要求解每个骨头逆矩阵, 因此遇到复杂的模型时(例如天龙八部的骨骼), 加载时间就比较长, 因为逆矩阵在动画的过程中是不会变化的, 是否可以考虑将每个骨头的逆矩阵事先求解并保存起来, 以便加快加载速度呢.

效果

原理很简单, 只是实现比较繁琐, 这里是加载天龙八部模型的效果

骨骼动画演示

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值