`
jgsj
  • 浏览: 963220 次
文章分类
社区版块
存档分类
最新评论

骨骼动画初步完成

 
阅读更多

骨骼动画初步完成

演示程序下载地址:这里

骨骼动画是角色动画的重要组成部分,因为只有把骨骼的位置摆准确了才能正确反映角色地姿势,后面的蒙皮动画就好做了。花了我十多天的时间,一直在琢磨着如何顺利地进行骨骼位置的变换,以达到MikuMikuDance中的样子。我做了很多实验,这回也算是有一定的成果吧,虽然关于反向运动学(Inverse Kinematics,IK)的部分我还没有吃透,不过做出一个东西,想分享分享。

关于骨骼的实现,一开始使用的是多叉树,后面发现使用多叉树进行遍历并不是那么好,因为要求的是层序遍历,我写过二叉树,发现层序遍历比较难实现,而先序遍历需要一个栈数据结构来保存父骨骼的变换,显得有些多余。我从PMD格式中读取骨骼数据,在PMD中骨骼数据是线性存储的,于是我想能不能也用线性存储这些数据,再辅以一些数据结构实现多叉树的功能?

最终我发现了多值散列表(MultiHash),我是这么做的,在骨骼读入后不久做一次遍历,以每个骨骼的索引为键,骨骼的层次关系(Hierachy)为值来建立多值散列表。因为模型的骨骼旋转和平移数据都是相对于父骨骼,考虑到要使用VBO,无法像以前那样push和pop模型矩阵,因此有必要将相对的旋转和平移转为绝对的旋转和平移。这个时候只需要对散列表中某一骨骼的层次关系进行遍历然后累加即可。下面是实现上述功能的关键代码:

voidMMDAnimationPrivate::InitBoneHierarchy( void )// 初始化骨骼的层次(孩子在尾端,祖先在首端)
{
   // 需要MMDRenderHandler的骨骼列表
   QVector<MMDRenderHandler::Bone>& bones = m_pRenderHandler->Bones();
 
   for ( int i = 0; i < bones.size( ); ++i )
    {
       quint16 parent = bones[i].parent;
 
       m_BoneHierarchy.insert( i, i );// 先将自己压入层次中
       while ( parent != quint16( -1 ) )
       {
           m_BoneHierarchy.insert( i, parent );// 将父骨骼压入层次中
           parent = bones[parent].parent;
       }
    }
}

……

// 旋转进行叠加
for ( int i = 0; i < bones.size( ); ++i)
{
   Quaternion absRotation;
   foreach ( quint16 index, m_BoneHierarchy.values( i ) )
    {
       absRotation *= bones[index].rotation;
    }
   bones[i].rotation = absRotation;
}

这里给出运行程序截图:


分享到:
评论

相关推荐

    骨骼动画演示程序

    骨骼动画是角色动画的重要组成部分,因为只有把骨骼的位置摆准确了才能正确反映角色地姿势,后面的蒙皮动画就好做了。花了我十多天的时间,一直在琢磨着如何顺利地进行骨骼位置的变换,以达到MikuMikuDance中的样子...

    顶点动画一键转换成骨骼动画破碎动画

    支持MAX2014版本,能制作简单的破碎效果。并且直接给碎块绑上骨骼,变成骨骼动画,使得导出时不需要导出顶点动画资源,容量会小很多。

    骨骼动画引擎AlloyStick.zip

    AlloyStick 主要由骨骼动画引擎和骨骼动画编辑器两部分组成,骨骼动画编辑器提供强大的骨骼动画编辑功能,通过设置动画关键帧,依靠强大的自动补间和骨骼关系,就可以制作出逼真、生动的Canvas骨骼动画,可以畅快的...

    《骨骼动画》.x骨骼动画详细解析

    .x骨骼动画详细解析,骨骼动画包括动作控制器,动画集等,为你做动作混合提供帮助

    Morph和关节动画概述,骨骼蒙皮动画详解+代码

    讲述骨骼动画的资料很多,但大部分都是针对DX8或DX9的SkinnedMesh进行讲解。我觉得对于骨骼动画初学者增加了不必要的负担,还没有理解骨骼动画的实质就已被DX复杂的架构搞得晕头转向了。这篇文章把注意力集中在骨骼...

    maya骨骼动画进阶

    Maya骨骼动画的一些进阶技巧,PDF文档,对于平滑蒙皮的绑定有很大帮助

    Directx8 骨骼动画 代码 工程

    Directx8 骨骼动画 代码 工程 Directx8 骨骼动画 代码 工程 Directx8 骨骼动画 代码 工程

    游戏用带骨骼动画的直升飞机

    游戏用带骨骼动画的直升飞机游戏用带骨骼动画的直升飞机游戏用带骨骼动画的直升飞机游戏用带骨骼动画的直升飞机游戏用带骨骼动画的直升飞机游戏用带骨骼动画的直升飞机游戏用带骨骼动画的直升飞机游戏用带骨骼动画的...

    opengl实现骨骼动画,用到glaux,glut

    opengl实现骨骼动画,用到glaux,glut,包含身体各个部分:头文小腿,大腿,自定义运动角度

    骨骼动画编辑器

    骨骼动画编辑器,用于设计一些骨骼动画效果,解压后点击Cocos StudioAnimationEditor运行就可以了

    CocoStudio 骨骼动画API 使用说明

    CocoStudio 骨骼动画的简单AIP,介绍动画导出文件的使用。

    PIXI骨骼动画Demo

    PIXI骨骼动画 Dragonbones

    D3D骨骼动画

    骨骼动画 3D游戏角色动画

    骨骼动画原理的文档 pdf

    骨骼动画原理 一篇不错的文档 需要的抓紧时间下

    java3D骨骼动画

    java3D骨骼动画,一个N人做的,好不容易下到的,大家分享。 资源地址:http://www.blogjava.net/chensiyu04/articles/215243.html

    Unity骨骼动画制作1

    Unity动画组件制作骨骼动画(1)首先需要动画组件,把所需图片资源导进来,堆放好位置,如果是一张大图需要分割图片,随后给所需要用的部位添加精灵网格,给每个精灵

    spine骨骼动画原文件及导出文件

    PIXI.js支持的骨骼动画资源,包含13个spine资源库,每个资源由***.spine,export文件夹(.json,.atlas,.png),images文件夹(ps切图)等。 export文件夹可供pixi-spine直接使用

    骨骼动画例子附源代码

    非常不错的一个例子.附有源代码,供大家学习.快下载吧,还等什么.

    骨骼动画的Demo

    骨骼动画实例。 演示:左右下键切换视角。Q站立。W行走

    骨骼动画word格式,详细介绍。

    骨骼动画word格式,详细介绍。骨骼动画 蒙皮动画 .x文件剖析。

Global site tag (gtag.js) - Google Analytics