骨骼动画的实现(OpenGL实现)
来源:互联网 发布:奥拉迪波数据 编辑:程序博客网 时间:2024/05/20 11:50
人物模型动画一直是游戏中最重要的组成部分, 因此这里我们研究骨骼动画是如何实现的.
原理
首先模型通常是由多个三角形形成的网格构成, 每个三角形有三个顶点, 因此动画的根本原理就在于不同时间内为每个顶点分配不同的位置, 这一切都是通过虚拟的骨头(bone)实现的. 其中模型上的每个顶点分配给不同的骨头, 比如说, 手部上的顶点可能分配给前臂, 手部两个不同的骨头, 每个骨头对不同顶点有不同的影响, 这通过权重值来实现的.
而后动画分为多个帧, 每一帧内, 多个骨头位于不同的位置, 就和人体一样. 最重要的是, 骨骼上的骨头是有层次的, 比如一般情况骨椎为根骨头, 而后派生出头部骨头, 手臂骨头, 腿部骨头.
实现
为了实现动画, 我们需要得到骨头在不同帧内变换矩阵, 而后我们模型上的顶点首先要变换至骨头所在的模型空间, 而后再乘以其相应的变换矩阵. 关键实现时需要注意求解每个骨头初始状态其自身模型坐标系的逆矩阵.
这里我是用的是 Ogre 的骨骼动画机制, 发现其骨骼加载的过程需要求解每个骨头逆矩阵, 因此遇到复杂的模型时(例如天龙八部的骨骼), 加载时间就比较长, 因为逆矩阵在动画的过程中是不会变化的, 是否可以考虑将每个骨头的逆矩阵事先求解并保存起来, 以便加快加载速度呢.
效果
原理很简单, 只是实现比较繁琐, 这里是加载天龙八部模型的效果
0 0
- OpenGL骨骼动画的实现
- 骨骼动画的实现(OpenGL实现)
- 骨骼动画的实现
- 关于骨骼动画的实现
- 一步一步的使用C++和OPENGL实现COLLADA骨骼动画 第一部分
- 一步一步的使用C++和OPENGL实现COLLADA骨骼动画 第一部分
- 一步一步的使用C++和OPENGL实现COLLADA骨骼动画 第一部分
- OGRE实现天龙八部组合的骨骼动画
- 骨骼动画反向动力学(IK)的实现
- 骨骼动画反向动力学(IK)的实现
- 骨骼蒙皮动画(SkinnedMesh Animation)的实现
- 骨骼动画反向动力学(IK)的实现
- 实现骨骼动画编辑器的准备工作
- 随笔--骨骼动画的实现原理
- 骨骼蒙皮动画(SkinnedMesh Animation)的实现
- 【DragonBone】实现骨骼动画倒放的参数
- 骨骼蒙皮动画(SkinnedMesh Animation)的实现
- 骨骼蒙皮动画(SkinnedMesh Animation)的实现
- 《JAVA并发编程实践》学习笔记(第四.五章)
- 树莓派安装配置启动CHROME及FLASH支持
- opencv轮廓检测之椭圆检测-----算法篇(9)--检测椭圆的其他算法
- 四层和七层负载均衡
- 2005年开启职业黑暗时代——北漂18年(50)
- 骨骼动画的实现(OpenGL实现)
- 软硬件调试九法:第七条规则 检查插头
- [BZOJ2946][Poi2000]公共串
- 心灵鸡汤之20160408
- 一款java串口调试工具
- CSS样式_字体
- 百思不得姐-创建cell的几种方式
- Swift快速入门之分支与循环
- Linux简介