虚拟三维场景中的人物角色特点和实现途径:
1)能真实反应现实世界中的人类动作,能够结合这些不同的动作,比如边走边看。此特点可以通过骨骼动画来实现,因为此类模型是由具有互相连接的“骨骼”而组成的骨架结构,通过改变骨骼的朝向和位置可以为模型生成动画。
2)动态人物模型在三维场景中运动需要碰撞检测,才能方便于走上下坡等场景,和不至于穿墙和入地等不符合现实世界的情景出现。此特点可以通过结合物理模型包来实现,如ODE,PAL等。
3)动态人物模型的制作和准确导入到场景中。模型的制作可以依靠Creator,3DMax,Maya等建模软件来完成。将制作好的人物模型导入到虚拟场景中,需要找到这两类模型的底层相同之处,一般来说,贴图文件格式差不多,而找到几何文件的共同地方,很有可能是追溯到数值矩阵甚至顶点对位置。如加载人物模型文件的主要代码是:
for( unsigned int i = 0; i < mBodyNode->getNumChildren(); i++ )
{
osg::MatrixTransform* scale = dynamic_cast<osg::MatrixTransform*>( mBodyNode->getChild(i) ); //得到矩阵
for( unsigned int j = 0; j < scale->getNumChildren(); j++ )
{
osg::Geode* geode = dynamic_cast<osg::Geode*>( scale->getChild(j) ); //得到孩子结点
for( unsigned int k = 0; k < geode->getNumDrawables(); k++ )
{ //得到基础图元
osg::Drawable* drawable = dynamic_cast<osg::Drawable*>( geode->getDrawable(k) );
}
}
}
..........
return mBodyNode.get();
4)动态人物模型的动作幅度改变。人物模型的位置和大小等设定,可以通过在整个模型数据的组织中设置顶部的变换矩阵来实现。而跑步等幅度的改变,除了骨骼动画有相应的动作改变外,也是将变换矩阵中的平移等参数进行放大。
图: