骨骼节点:游戏中的Avatar人物与人体的匹配度高低是“骨骼识别”的关键,匹配度的高低,决定了能实时抽象出的关键点数量。理论上,关键点越多,识别到的人体“骨架”就越真实。另外一个关键点,是骨骼节点的精度问题,这涉及到几个方面,包括激光散斑测距采样的精度、红外摄像头的采样分辨率和频率、通过深度图构建骨骼数据的延时等。
2。2 软件说明
本项目中需要使用到Unity3D游戏引擎,在配合Kinect设备使用的时候,需要安装Kinect的驱动程序。从微软的官网上可以找到Kinect的驱动程序,在Unity3D的官网上,也可以找到各个版本的Unity3D开发环境。Kinect驱动程序中包含了开发者需要的工具包,而且是免费提供的;Unity3D的个人版也是免费的。
2。2。1 Unity3D简介
Unity3D是一款游戏引擎,可以让开发人员轻松构建三维空间,并添加三维模型进行模型互动。Unity3D制作的游戏程序移植性非常强, 脚本代码在编写好之后,只要选择需要发布的平台,就可以直接发布到想要发布的平台,无须重新编写脚本代码或是更改场景模型。
游戏引擎对于游戏来说,像跑车的引擎一样,是游戏表现的核心,现在为止,一些大型的游戏制作公司,都有着自己开发或者收购的游戏引擎,比如虚幻引擎,暴雪的魔兽引擎,当然不同的引擎,会有不同的性能表现和画面风格,其所需要的系统开销也大不相同。
Unity3D引擎的性能优异,高度的跨平台性一直受到开发、使用者的敬仰。以C#和JavaScript为主的编程语言,由于JavaScript语法过于灵活,为了让编写的代码更加严谨,同时也为了实现简单代码间,类对象的相互操作,我选用C#这种面向对象的语言。而且Unity3D还对编写脚本代码提供了一个很好的编辑器MonoDeveloper,以及控制台调试工具。如下图2-2为Unity3D的开发编程环境展示[6]。
在Unity3D中,创建(Create)菜单下,可以手动选择创建一个游戏对象(GameObject),它可以是一个相机,一个灯光,或者一个简单的3D模型。当我们要在程序里面,动态地创建一个相机的时候,可以在程序脚本中创建一个游戏对象,然后把相机(Camera)组件添加到该对象中,创建灯光、GUI等也类似,但在创建简单模型的时候,并没有类似Cube,Sphere这样的组件可以添加,而通过游戏对象GameObject这个类的一个静态方法就可以达到这个目的:Static GameObject CreatePrimitive(PrimitiveType type);
可以根据PrimitiveType创建五种类型的基础模型:
PrimitiveType。Plane(面板) , PrimitiveType。Cube(立方体) ,
PrimitiveType。Sphere(球体) , PrimitiveType。Capsule(胶囊体) ,
PrimitiveType。Cylinder(圆柱体)
现实世界中的物体,都要受到力的作用,在游戏中,要如何让游戏对象也受到力的作用,这个问题转化到Unity3D的环境下,就是怎么让Unity3D中的游戏对象受到力的作用。当一个游戏对象被赋予了刚体组件之后,游戏引擎就会将该游戏对象置入物理引擎模拟的力场中。同时我们也可以给这个对象施加各种作用力,让它运动起来。如果游戏内的物体需要实现被重力作用的效果,那么相应的游戏物体,都必须要添加刚体组件。通过菜单给游戏内物体添加刚体的操作为:主菜单->Component(组件)->Physics(物理)->RigidBody(刚体)。添加相似组件的操作都很类似。刚体有很多属性,下面简单介绍几个常用属相:
Mass(质量):质量越大的物体,惯性越大;
Drag(阻力):这里指的是空气阻力,当游戏物体受到某个作用力的时候,这个值越大越难移动;