实例介绍
基于视频序列捕获人体运动和人体运动分析 如何制作一个可控制的人体骨骼模型 描述:本文提供一种将骨架动作矢量映射到人体骨架模型的一种方法,通过输入各个骨骼的当前方向,反馈给骨架模型,这样就实现了动画的效果。 实验开发工具是VC6.0在OpenGL平台上开发完成。 阅读对象: 假定读者已经熟悉OpenGL编程,就算不熟悉,只要了解基本的旋转,平移,堆栈操作就好。 假定读者已经了解基本的c++编程,其中需要了解递归的算法,递归的方法请参考一下数据结构吧。 制作过程: 第一步,3D模型准备 这一步骤的目的是提供分解的骨骼模型,它需要导出多个组成身体结构的文件,模型可以不用自己制作,只要到网上找找吧,应该很多,最好是是人体模型,如果用动物的模型也可以,不过需要自己定义映射骨架了,比如图中的骷髅模型是我从人体动画软件poser 5.0找到的。然后使用3d max 将身体的各个部位导出为3ds文件,这个步骤很简单,也不需要有什么3d max的基础。这里有一个小的技巧就是可以选中多个部分作为一个3ds模型导出,比如我需要将左右肩胛骨与脊椎骨肋骨作为同一个部分导出,这样可以将它命名为身体躯干(body)。这样我们就准备了各个3ds文件了,分别是: 身体躯干 BODY.3DS 头部 HEAD.3DS 左臂 LSHOULDER.3DS 右臂 RSHOULDER.3DS 左小臂 LELBOW.3DS 右小臂 RELBOW.3DS 左大腿 LTHIGH.3DS 右大腿 RTHIGH.3DS 左小腿 LFEET.3DS 右小腿 RFEET.3DS 这样这些组成部分就可以灵活的拼接出一个人体来了。 第二步,定义相关的核心数据结构 为了得到运动的各个身体部分数据信息,我们需要存储一些运动信息,主要有: 骨骼ID 骨骼关节的当前位置;r_x,r_y,r_z 骨骼之间的关系,例如手臂是躯干的延伸,而左小臂是左臂的延伸;PID,CID 我们可以通过下图来了解骨骼之间的结构关系 存放3ds文件位置;file_name_3ds 3ds模型的初始化方向;这个是比较抽象一点的概念,它是指从父节点指向子节点的方向,例如左小臂的初始位置是平放向下,那么对应的矢量就是 (-0.2,-1,0) 以下是数据结构部分: class bone { public: int y; int x; int r_z; //现实世界z坐标 int r_y; int r_x; int rotated_X; //旋转后的坐标 int rotated_Y; int is_marked; //是否已经标记 int PID; //父节点 int CID; //子节点,目前针对轴关节和膝盖有效 float start_arc_x,end_arc_x; //相对父节点的x 左右方向转动角度限制 float start_arc_y,end_arc_y; //相对父节点的y 上下方向转动角度限制 float start_arc_z,end_arc_z; //相对父节点的z 前后方向转动角度限制 double LengthRatio; char name[80]; //名称 char file_name_3ds[180]; //3ds文件名称 int ID; bone(int ID,char *name,int PID); virtual ~bone(); float bone_init_x,bone_init_y,bone_init_z; //初始化骨骼的矢量方向,3d max 模型 }; 第三步,初始化骨架结构 在定义了bone的结构以后,我们定义一个skeleton类来在第一次初始化时加载这些结构, obone = bone (2,"head",1); //定义一个bone strcpy(obone.file_name_3ds,"head.3DS"); //设置它的3ds文件名 obone.bone_init_x = 0; //初始化骨骼的矢量方向 obone.bone_init_y = 1; obone.bone_init_z = 0; bonevec.push_back (obone); //放入vector结构,这里用到了STL编程技术中的vector 以下是实现的部分代码: skelecton::skelecton() { float fy = 0.56f ; float ftx = 0.19f; float ffx = 0.08f; bone obone = bone (1,"neck",0);
【实例截图】
【核心代码】
4744302543308226603.rar
├── code
│ ├── HumanMotionTrack_eyetoy.rar
│ ├── HumanMotionTrack.rar
│ ├── HumanMotionTrack_skeleton.rar
│ └── readme.txt
└── www.pudn.com.txt
1 directory, 5 files
标签:
相关软件
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论