zoukankan      html  css  js  c++  java
  • 虚拟三维场景中角色动画的增加

       虚拟三维场景中加入动态人物,是虚拟社区建设和三维游戏的基本要求。在完成这个目标之前,有必要分析人物角色特点和分别阐述其实现途径。
        
    虚拟三维场景中的人物角色特点和实现途径:
        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动态人物模型的动作幅度改变。人物模型的位置和大小等设定,可以通过在整个模型数据的组织中设置顶部的变换矩阵来实现。而跑步等幅度的改变,除了骨骼动画有相应的动作改变外,也是将变换矩阵中的平移等参数进行放大。

          图:

  • 相关阅读:
    SiteMesh入门(1-1)SiteMesh是什么?
    接口和抽象类有什么区别
    StringUtils工具类常用方法汇总(判空、转换、移除、替换、反转)
    StringUtils工具类常用方法汇总(截取、去除空白、包含、查询索引)
    加密方法与HTTPS 原理详解
    String.split()与StringUtils.split()
    自动生成注释
    linux下安装与部署redis
    mybatis批量保存的两种方式(高效插入)
    pagehelper的使用
  • 原文地址:https://www.cnblogs.com/wuhanhoutao/p/996536.html
Copyright © 2011-2022 走看看