OGRE骨骼动画与四元数旋转
来源:互联网 发布:dwg view for mac 编辑:程序博客网 时间:2024/04/29 11:11
一、操纵骨骼点的骨骼动画
最近在用OGRE库做三维模型动画,根据OGRE动画类型的具体分类,我做的是骨骼动画,而不是节点动画、定点动画等类型。
此外对于骨骼动画,一般常见的方式是将创作好的动画帮顶到骨骼节点上,再为每个骨骼创建关键帧,然后刷新显示。具体的实现代码,网上有现成的博客里有,我也学习到很多。但是我其实需要的动画,只是人为的在每帧去控制骨骼点进行旋转、平移等操作,以此实现骨骼动画,每一帧的骨骼操作动作是通过一定的算法方式,如将一个骨骼节点每秒绕坐标轴y旋转1度,这样运行起来之后,这个骨骼点就会一直旋转下去。
具体步骤:
1. 加载mesh文件,一般还需要mesh文件对应的skeleton文件,skeleton跟mesh文件放到一个文件夹下。
2. 创建根节点的子节点,创建mesh的场景并绑定到此节点上,并设定节点的位置与姿态(旋转角)。
3.利用模型的场景指针中的getSkeleton()方法并赋给SkeletonInstance,如SkeletonInstance * skel= ent->getSkeleton();
4.此时利用骨骼句柄指针,去获取骨骼中的特点关节点,返回Bone *,代表当前骨骼关节点(此块骨头)的指针。如:Bone *manuallyControlledBone = skel->getBone(0);并将此骨骼节点设为可以手动控制,如:manuallyControlledBone->setManuallyControlled(true);关于获取每个骨头,getBone()传入的为骨骼节点的编号,一般都为整数,从0开始,而不是所谓的骨头的名称。
5.此时就可控制每一帧时对此骨骼点要进行的操作,如在帧开始的时候,在重写的frameStarted()函数里,可以对此骨骼节点进行旋转,平移等操作。此时显示起来就是动画效果。
如果只是想静态显示所操作的变换,那么在frameStarted()里对此关节点进行reset(),此时的模型只是静态的,反应一帧里所进行的变换操作。
二、关于四元数与旋转
四元数的具体定义和资料网上很多,大多数都是公式推导,这里我就不罗列了。在OGRE中,在旋转一个节点时,除了常见的pitch()、roll()、和yaw()等绕局部坐标轴进行旋转的参数外,还有就是通过四元数的参数。一开始只是知道四元数代表一种旋转规则,也就是一个线段、向量A绕B(nx,ny,nz)这个向量旋转a度(弧度制),一般都是逆时针旋转为正,从而计算出这个四元数q(w,x,y,z),计算公式为;
具体见
http://www.ogre3d.org/tikiwiki/Quaternion+and+Rotation+Primer
因此在对某个节点进行旋转时,可以通过确定旋转前和旋转后的一个向量,然后利用getRotationTo获取这个操作对应的四元数,也可以通过自己要进行旋转的轴与旋转角度,构造出四元数,即可进行这个节点的旋转变换,一般都是局部坐标系的变换。
此外对于一个节点(场景节点、骨骼节点等),getOrientation获取的是四元数,表示此节点对父节点所经过的旋转操作。而_getDerivedOrientation()才能返回此节点对应世界坐标系的旋转变换,这跟getPosition()与_getDerivedPosition()很相似,一个是获取此节点在局部坐标系下的位置,另一个是获取其在世界坐标系下的位置。这种坐标系之间的关系,在未理解之前还是挺复杂的,理解之后就明白多了。
- OGRE骨骼动画与四元数旋转
- Ogre的骨骼动画
- Ogre骨骼动画融合
- Ogre骨骼动画融合
- Ogre骨骼动画融合
- Ogre骨骼动画
- Ogre骨骼动画
- Ogre骨骼动画分析
- Ogre骨骼动画分析
- Ogre骨骼动画分析
- Ogre骨骼动画
- Ogre骨骼动画分析
- Ogre骨骼动画
- Ogre骨骼动画分析
- Axiom3D:Ogre动画基本流程与骨骼动画
- OGRE动画系统--骨骼动画
- Ogre手动添加骨骼动画
- OGRE手动控制骨骼动画
- MongoDB介绍和安装
- Webx中AutoConfig使用
- android Volley网络框架
- window.clearInterval与window.setInterval的用法
- Accelerated C++ day2
- OGRE骨骼动画与四元数旋转
- js判断滚动条是否到达顶部、底部 兼容各种浏览器
- 世界上第一款IOP芯片 -- W7500 MCU 强势来袭!
- Sublime Text 3常用快捷键
- Recovery选项菜单循环切换选项
- Ubuntu 环境搭配 jdk,ndk,sdk
- 方寸指间(笔记)
- linux 下升级新内核
- PLSQL 导入导出数据库