3DGIS(3D GIS)

研究OpenGL,DirectX 3D,GPU和GIS

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
   虚拟三维场景中加入动态人物,是虚拟社区建设和三维游戏的基本要求。在完成这个目标之前,有必要分析人物角色特点和分别阐述其实现途径。
    
虚拟三维场景中的人物角色特点和实现途径:
    1)能真实反应现实世界中的人类动作,能够结合这些不同的动作,比如边走边看。此特点可以通过骨骼动画来实现,因为此类模型是由具有互相连接的“骨骼”而组成的骨架结构,通过改变骨骼的朝向和位置可以为模型生成动画。

    2)动态人物模型在三维场景中运动需要碰撞检测,才能方便于走上下坡等场景,和不至于穿墙和入地等不符合现实世界的情景出现。此特点可以通过结合物理模型包来实现,如ODEPAL等。

    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动态人物模型的动作幅度改变。人物模型的位置和大小等设定,可以通过在整个模型数据的组织中设置顶部的变换矩阵来实现。而跑步等幅度的改变,除了骨骼动画有相应的动作改变外,也是将变换矩阵中的平移等参数进行放大。

      图:

posted on 2007-12-16 11:56  武汉侯涛  阅读(2943)  评论(5编辑  收藏  举报