基于人体模型模型的三维角色控制---毕业论文_第1页
基于人体模型模型的三维角色控制---毕业论文_第2页
基于人体模型模型的三维角色控制---毕业论文_第3页
基于人体模型模型的三维角色控制---毕业论文_第4页
基于人体模型模型的三维角色控制---毕业论文_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

摘摘 要要 近年来,虚拟人的行为再现技术成为研究热点之一,无论是在许多涉及到人类自身的 应用研究上(例如载人航天、多兵种军事训练与演练、医疗手术的模拟与训练等) ,还是在 三维游戏、计算机动画、影视制作等领域,都迫切需要实现对人类外观和动作行为的模拟 仿真。因为人物运动的复杂性,无论是在人体建模和底层动作控制技术上还是在高层行为 控制技术上,都存在着许多技术难题。 本文讨论研究了产生逼真人物行为动画时会遇到的问题及解决方案。将由三维模型软 件制作导出的模型文件和由动作捕捉设备导出的骨骼动作文件作为输入,输出为模型动画 再现。 首先,分析了 3ds 格式的三维模型文件内容,及如何对再现的模型进行全方位观察。 其次,分析了 bvh 格式的骨骼动作文件内容,再现了文件中所包含的骨架信息和运动信息, 形成骨骼动画。然后,将运动数据和建模得到的人体模型相结合,产生实时人体骨骼蒙皮 动画。并对多种骨骼皮肤绑定技术进行介绍分析,提出了一个比较完整的骨骼皮肤绑定流 程,并选择实现骨骼皮肤点绑定算法。 最终实现了一个基于 OpenGL 图形库与 MFC 程序框架的系统,对三维模型文件和骨骼动 作文件进行再现,并将模型和骨骼进行匹配,获得骨骼驱动模型生成动画的效果。 关键字关键字:三维模型;运动控制;骨骼蒙皮; Abstract The reproduction of a virtual humans behavior technology has become one of the hot research topics in recent years. The simulation of human looks and actions is in a pressing need whether in the research involving human being itself, such as manned space flight, arms military training and exercises, the simulation and training of surgical operations, etc, or in the fields of three-dimensional games, computer animation, film and television production. Because of the complexity of human motions, there are many technical problems whether in the modeling of human and human motion controlling technology and high-level behavior control technology. This article discusses the problems and solutions might be encountered in the research of generating realistic animated figures behavior. The input is the model file produced by three- dimensional modeling software and the skeleton file exported by motion capture equipment, and the output is a model animation. First of all, we analysis the content of three-dimensional model 3ds format file and how to provide a all-round observation of reproduced model file. Secondly, we analysis the content of skeleton file in bvh format, which reproduces the skeleton information and motion information contained in the file, forming a skeleton animation. Then, we combine motion data and model of human body, and produce a real-time skinned skeleton animation. We analysis many kinds of skin and skeleton binding technology, and produce a complete binding process and a realization of the binding algorithm. Eventually, I have developed a system based on OpenGL graphics library and the MFC Framework, which reproduces the three-dimensional model and skeleton motion, and matches the model and skeleton, generating animation effects produced by skeleton-driven model. Key words: 3D model; motion control; skeleton animation 目目 录录 第一章第一章 绪论绪论1 1.1 研究的背景及意义研究的背景及意义.1 1.2 论文组织结构论文组织结构2 第二章第二章 开发工具与相关技术开发工具与相关技术.3 2.1 系统开发工具系统开发工具3 2.1.1 Microsoft Visual C +编程平台及 MFC 库3 2.1.2 图形编程库 OpenGL 的介绍3 2.1.3 三维建模工具 3D Studio Max 简介.4 2.2 三维图形学相关知识三维图形学相关知识5 2.2.1 三维图形的几何变换和投影变换5 2.2.2 欧拉角与四元数6 第三章第三章 三维建模技术分析三维建模技术分析.9 3.1 人体建模技术分析人体建模技术分析.9 3.1.1 线框建模9 3.1.2 实体建模10 3.1.3 人体曲面建模10 3.1.4 基于物理的建模10 3.2 外部模型导入外部模型导入.11 3.2.1 3ds 结构文件分析.11 3.2.2 读入 3ds 模型文件12 3.2.3 三维模型数据保存13 3.2.4 计算模型顶点的法向量.14 3.3 交互式观察模型实现交互式观察模型实现.15 3.3.1 三维模型再现.15 3.3.2 三维模型大小规格化.16 3.3.3 观察三维模型.17 第四章第四章 骨骼动作文件的分析与再现骨骼动作文件的分析与再现.19 4.1 骨骼动作文件介绍骨骼动作文件介绍.19 4.2 虚拟人的骨骼架构虚拟人的骨骼架构.19 4.3 BVH 骨骼动作文件的读取骨骼动作文件的读取.20 4.3.1 BVH 文件分析20 4.3.2 存储 BVH 文件内容22 4.4 骨骼动作行为实现骨骼动作行为实现.23 第五章第五章 骨骼皮肤绑定技术骨骼皮肤绑定技术.27 5.1 骨骼皮肤绑定技术综述骨骼皮肤绑定技术综述.27 5.2 骨骼皮肤数据匹配骨骼皮肤数据匹配28 5.3 皮肤绑定权计算皮肤绑定权计算.33 5.3.1 皮肤点绑定算法介绍33 5.3.2 点绑定算法实现34 5.4 动画生成和效果检测动画生成和效果检测35 5.4.1 动画生成.35 5.4.2 效果检测.36 第六章第六章 总结与展望总结与展望.37 参考文献参考文献.38 致致 谢谢39 Contents Chapter1 Introduction1 1.1 Background.1 1.2 Architecture of Thesis2 Chapter2 Developing Tools and Environment3 2.1 System Developing Tools3 2.1.1 Microsoft Visual C + And MFC Library.3 2.1.2 Graphical Programming Library OpenGL 3 2.1.3 Modeling Tool 3D Studio Max .4 2.2 Three-dimensional Graphics Knowledge5 2.2.1 Geometric and Projection Transformation.5 2.2.2 Euler Angle and Quaternion6 Chapter3 Analysis of Modeling Techniques9 3.1 Human Modeling.9 3.1.1 Wireframe Modeling .9 3.1.2 Solid Modeling 10 3.1.3 Body Surface Modeling.10 3.1.4 Physics-based Modeling10 3.2 Importing External Models.11 3.2.1 3ds File Analyzer.11 3.2.2 3ds Model File Reading.12 3.2.3 Model Struct 13 3.2.4 Normal Vector calculation.14 3.3 Interactive Observation Model.15 3.3.1 Models Reproduction .15 3.3.2 Standardized of The Model Size16 3.3.3 Observation of Model17 Chapter4 Skeletal Motion File.19 4.1 Skeletal Motion File Introduction.19 4.2 Virtual Human Skeleton Structure 19 4.3 BVH Skeletal Motion File Reading.20 4.3.1 BVH File Analyzer20 4.3.2 The Content of BVH File.22 4.4 Skeletal Animation to Achieve23 Chapter5 Skin Skeleton Binding.27 5.1 Overview .27 5.2 Skin Skeleton Pair28 5.3 Skin Weight Calculation33 5.3.1 Algorithm Overview33 5.3.2 Vertex Blending Algorithm.34 5.4 Animation Generation and Detection of The Effect .35 5.4.1 Animation Generation35 5.4.2 Detection of The Effect36 Chapter6 Summary37 References38 Acknowledgements.39 基于人体模型的三维角色控制基于人体模型的三维角色控制 1 第一章第一章 绪论绪论 1.11.1 研究的背景及意义研究的背景及意义 进入 21 世纪,随着计算机技术高速发展与人类对于未知世界的不断探索,在许多复杂和 危险的情况下运用虚拟人来代替人类进行科学研究的需求变得越来越强烈。虚拟人技术在虚 拟现实、三维计算机动画、体育系统仿真、载人航天、虚拟主持人、军事、医学等领域内得 到越来越广泛的应用1。 虚拟人(Virtual Human)是人在计算机生成空间(虚拟环境)中的几何特性与行为特性 的表示2,是多功能感知与情感计算的研究内容。三维虚拟人是指虚拟人所处环境和自身几 何特性是三维的。它的技术的研究涉及到计算机图形学、运动学与动力学、多功能感知、人 工智能、虚拟现实等多个学科,是一个交叉应用学科。但由于这项技术起步较晚,加上人体 本身的复杂性以及目前计算资源的有限性,三维虚拟人技术仍存在许多亟待解决的问题。 从以上概念中可以看出虚拟人不仅具有几何特性,而且具有行为特性。即对虚拟人进行 建模,不仅要建立几何模型,而且要建立运动模型。因此针对虚拟人技术的研究大致可以分 为虚拟人的几何表达、虚拟人的运动控制、虚拟人的行为表达以及虚拟人的认知表达 4 个主 要方面。前两个主要方面从虚拟人几何和行为特性逼真性的角度进行研究,而后两个方面主 要从虚拟人的社会性和智能化角度进行研究。而本文主要从前两个方面对其进行探究。其中 虚拟人的几何建模方式主要有线框建模、实体建模、人体曲面建模、基于物理的建模等方法, 而运动模型的建立则可基于关键帧方法、运动学方法、动力学方法、运动编辑方法以及运动 捕捉方法。 虚拟人行为在计算机中以仿真动画形式呈现在人们面前,将人体几何模型和运动模型结 合在动画形式上还可分为关节动画、单一网格模型动画和骨骼蒙皮动画等。目前由于骨骼蒙 皮动画较之前面两者,具有更逼真,更生动的特性,它已经成为各类实时动画应用中使用最 广泛的动画技术。在骨骼蒙皮动画中,几何模型和运动模型作为独立个体存在,而通过骨骼 皮肤绑定技术将二者联接起来。其中骨骼作为中间载体,由运动控制骨骼,而骨骼控制皮肤 变形。这样可以方便的将几何模型的建立与运动模型研究分开来。 目前一些相关方面的开源软件有开源骨骼动画引擎 Cal3d、图形处理引擎 Ogre、三维游 戏引擎 Irrlicht 等。本文在实现过程中对相关代码进行了借鉴。 基于人体模型的三维角色控制基于人体模型的三维角色控制 2 根据上文,我们选择使用运动捕获的数据,从中提取出层次化的骨骼数据,皮肤数据使 用的是三维建模软件生成的线框模型,研究了这些数据之间如何配合完成骨骼皮肤绑定、生 成动画的过程和算法。如图 1-1 所示。 3D Max 动作捕捉设备 皮肤数据 骨骼数据 运动数据 绑定角 色数据骨骼蒙皮动画 角色动画 图图 1-11-1 骨骼皮肤动画生成过程骨骼皮肤动画生成过程 1.2 论文组织结构论文组织结构 本文的组织结构如下:第一章介绍虚拟人仿真技术的发展和骨骼蒙皮动画的主要内容及 骨骼皮肤绑定技术的概念,是背景知识介绍及相关工作总结;第二章对开发环境以及三维图 像的一些相关知识进行了介绍;而在第三章则开始分析了 3ds 模型文件结构,进行再现。进 而在第四章中结合 BVH 动作文件对骨骼动画的骨骼进行分析,通过文件中的动画信息实现动 画内容。第五章则是介绍了多种骨骼皮肤绑定技术并对点绑定予以实现。最后在第六章进行 总结和展望。 基于人体模型的三维角色控制基于人体模型的三维角色控制 3 第一章:绪论第六章:总结与展 望 骨骼皮肤绑定 虚拟人仿真 骨骼蒙皮动画 第二章:开发工具与相关技术 第三章: 三维建模 技术分析 第四章: 骨骼动作 文件分析 骨骼皮肤绑定技术 第五章: BVH 动作文件分析 骨骼动画 三维模型文件分析 三维模型再现 骨骼皮肤数据匹配 骨骼皮肤数据匹配 动画生成 效果检测 图图 1-21-2 论文组织结构图论文组织结构图 基于人体模型的三维角色控制基于人体模型的三维角色控制 4 第二章第二章 开发工具与相关开发工具与相关技术技术 2.1 系统开发系统开发工具工具 开发工具: Microsoft Visual C+6.0 开发语言: C+ 图形库:OpenGL 开发平台: Windows XP .1 Microsoft Visual C +编程平台及编程平台及 MFCMFC 库库 Microsoft Visual C+(简称 VC)是微软公司的一款集成开发环境的 C+开发工具,提供 编辑 C 语言,C+以及 C+/CLI 等编程语言。他将微软视窗程式设计(Windows API) 、三维 动画 DirectX API,Microsoft .NET 框架等进行整合,为程序开发过程中的编译、编辑与调试 工作提供便利。 在其中,MFC(Microsoft Foundation Classes)是一个微软公司提供的类库,它以 C+类 的形式封装了大部分重要的数据结构、Windows 句柄、Windows 的内建控件和组件以及相关 API 函数调用,形成一个应用程序框架3。通过配合使用 Visual C+提供的 AppWizard(集 成开发环境下的高级代码生成器)创建应用程序框架;使用 ClassWizard (类管理工具)工具, 建立应用程序的类、消息处理、数据处理函数或定义控件的属性、事件、方法等可以方便的 实现程序编写,减少在开发过程中程序员的工作量。利用 MFC 搭建的框架来实现程序,从 而驱除了应用程序本身的复杂性给程序设计带来的影响,使得我们可以高效率地编写出高品质 的代码。 .2 图形编程库图形编程库 OpenGL 的的介绍介绍 虚拟现实技术最重要的一部分内容就是三维图形编程。当前,三维图形编程中最为突出 的工具之一是 SGI 公司的 OpenGL(Open Graphics Language,开放式的图形语言),它已经 成为一个工业标准的计算机三维图形软件开发接口,并广泛应用于游戏开发、建筑、产品设 计、医学、地球科学、流体力学等领域。OpenGL 是 Microsoft、SGI、IBM、SUN、HP 等多家 基于人体模型的三维角色控制基于人体模型的三维角色控制 5 世界著名公司在 GL 的基础上联合推出的一个通用共享的开放式三维图形标准,它独立于窗 口系统和操作系统,实际上也是一个图形与硬件的接口。OpenGL 可在 Windows 上运行,采用 Visual C+作为开发平台,在微机中具有广泛应用。 OpenGL 是一种过程性的图形 API,它不是描述性的。在开发过程中,程序员并不需要描 述场景的性质和外观,而是事先确定一些操作步骤。这些步骤正是实现一定的外观或效果所 需要的4。这些步骤涉及到许多 OpenGL 命令的调用。这些命令可以在三维空间中绘制各种 图元,例如点、直线和多边形等。另外,OpenGL 还支持光照和着色、纹理贴图、混合、透明、 动画以及其他许多特殊的效果和功能。OpenGL 并不包含任何用于窗口管理、用户交互以及文 件输入输出函数。它通过与不同宿主环境(例如 Microsoft Windows)自己拥有一些函数交 互,由宿主环境实现了这些功能,并且负责实现一些方法,向 OpenGL 递交窗口绘图的控制。 OpenGL 的实现可以分为软件实现和硬件实现。软件实现即对 OpenGL 函数调用做出创建 三维图像的软件函数库。而硬件实现的载体为完成相同任务的硬件设备(通常是显示卡)的 驱动程序。硬件实现比软件实现快上许多倍,目前不同的显示卡对 OpenGL 的支持不一,但 大部分都对其进行支持。 .3 三维建模工具三维建模工具 3D3D StudioStudio MaxMax 简介简介 OPENGL并没有提供三维模型的高级命令,只是通过基本的几何图元(点、线及多边形等) 来建立三维立体模型。而这+-在实际应用中,由于人体的复杂性,需要构建的三维模型则比 较复杂,那么就需要将其与要与其它功能强大的三维建模软件结合,利用一定的算法,将其 它三维建模软件创建的模型数据读出来,然后利用这些数据在OPENGL环境中重新构建三维模 型。从而可以将程序员从构建复杂三维模型这一枯燥复杂的工作中解脱。而目前市面上有许 多优秀的三维图形软件如3D Studio Max,Maya,AutoCAD等,可以在其中方便地建立三维模 型,通过OPENGL对建立模型进行控制。这里我们选择了3D Studio Max。 3D Studio Max是Autodesk公司开发的基于PC系统的三维动画渲染和制作软件5。由于其 制作动画性能优越、操作方便而受世人瞩目1181,目前,该软件已广泛应用于CAI、工业设 计、建筑装演、军事模拟等领域。它具有方便构造复杂物体、强大的材质编辑器、较简易的 动画制、良好的操作界面作等特点。而在建立好模型后,3D Studio Max支持多种模型导出 文件格式。其中3DS文件格式是一种使用普遍的数据格式,用以保存三维图形数据,在网络 基于人体模型的三维角色控制基于人体模型的三维角色控制 6 上也有丰富的3DS资源。 2.2 三维图形学相关知识三维图形学相关知识 在多维空间中,通常把一个点用齐次坐标表示,即用 n+1 维的向量来表示 n 维的点坐标 6。那么在三维空间中,则用四维向量来表示点坐标。使用这种表示法不但可以表示无穷远 点,还可以用相对应的 4x4 的矩阵实现各种空间变换。由于用计算机存储矩阵有行主元和列 主元两种形式,因而齐次坐标也有行向量和列向量两种表示法,本文统一采用 OpenGL 中的 表示方法,即矩阵使用列主元方法,齐次坐标使用列向量表示。具体表示如下(其中下标表 示元素的逻辑顺序): , T= (公式 2-1) w z y x V 151173 141062 13951 12840 aaaa aaaa aaaa aaaa .1 三维图形的几何变换和投影变换三维图形的几何变换和投影变换 几何变换几何变换 几何变换是指在交互式图形环境中,用户经常需要改变三维模型的位置,角度等,为此 所使用的变换。常用的几何变换有平移变换、比例变换、旋转变换及这些变换的合成变换。 而这些变换可具体表现为 4 维矩阵。 平移变换的变换矩阵及变换过程的矩阵表示如公式 2-1,相当于将点(x, y, z,)平移 至(x,y,z)。平移变换在 OpenGL 函数库中对应函数是 void glTranslatef xyz (GLfloat x, GLfloat y, GLfloat z)或 void glTranslated(GLdouble x, GLdouble y, GLdouble z )。 MT = , V*MT = = (公式 2-2) 1 0100 0010 0001 zyx 1 0100 0010 0001 * 1zyx z y x 1 zz yy xx 比例变换的变换矩阵如下,相当于将点(x, y, z,)相对于参考点(xf, yf, zf,)作比 例变换。比例变换在 OpenGL 函数库中对应函数是 void glScalef (GLfloat x, GLfloat y, 基于人体模型的三维角色控制基于人体模型的三维角色控制 7 GLfloat z)或 void glScaled(GLdouble x, GLdouble y, GLdouble z )。 MT = (公式 2-3) 1*)1 (*)1 (*)1 ( 000 000 000 fzfyfx z y x zsysxs s s s 旋转变换较为复杂,且有多种实现方式,具体在 2.2.2 节中介绍。 投影变换投影变换 投影变换是把三维图形转化为二维图形的过程6。投影变换根据投影中心和投影平面之 间距离的不同可分为平行投影和透视投影两大类。平行投影的投影中心与投影平面之间的距 离为无穷大,相当于以平行光照射模型对视口成像,多用于工程制图。而对于透视投影,投 影中心与投影平面之间的距离是有限的,符合人体的观察习惯,成像会呈现近长远短的效果。 在本文中,我们对三维模型的观察采用的是透视投影方式。 .2 欧拉角与四元数欧拉角与四元数 几何变换中的旋转变换是指将一点围绕某一轴旋转固定的角度所得到的变换。旋转变换 可分为绕坐标轴旋转的旋转变换和绕任意轴旋转的旋转变换。下面分别描述了物体绕 x,y 和 z 轴旋转角时的情况: (1)绕 z 轴旋转 R(z,)= (公式 2-4) 1000 0100 00cossin 00sincos (2)绕 x 轴旋转 R(x,)= (公式 2-5) 1000 0cossin0 0sincos0 0001 (2)绕 y 轴旋转 基于人体模型的三维角色控制基于人体模型的三维角色控制 8 R(y,)= (公式 2-6) 1000 0cos0sin 0010 0sin0cos 绕任意轴的旋转变换在 OpenGL 中提供了函数实现,函数声明如下: void glRotated(GLdouble angle, GLdouble x, GLdouble y, GLdouble z); void glRotatef(GLfloat angle, GLfloat x, GLfloat y, GLfloat z); 欧拉角欧拉角 欧拉角是一种重要的运动姿态描述方法,在三维空间中任何一个旋转可以通过 3 个绕坐 标轴的独立旋转表示出来。例如:任何旋转可以表示成首先绕 Z 旋转角,然后绕 Y 旋转角, 最后绕 X 旋转角,如图 2-1 所示。但是使用欧拉角进行旋转实际上是把旋转变换空间的三 个元素相组合,它是与顺序相关的,也就是说绕各个坐标轴旋转的次序会影响最终的结果。 同时在某种极端的情况,经历过前面 2 个选择变换,其中一个旋转轴可能会映射到另一个旋 转轴上,使得接下来的行为不能按照期望的旋转轴和角度旋转物体。这种情况称之为做万向 节锁。这是使用欧拉角所不能避免的,解决它的方法是使用 节中的四元数代数。 - 图图 2-12-1 欧拉角示意图欧拉角示意图 四元数四元数 四元数理论由英国数学家 Hamilton 在十九世纪最早提出,1985 年 SIGGRAPH 把四元数方 法引入计算机图形学,主要用于确定物体的旋转和朝向。用四元数可以解决用欧拉角旋转时 基于人体模型的三维角色控制基于人体模型的三维角色控制 9 的万向节锁问题,而且与其他的旋转方法相比较,四元数更简单,系统开销更小。 四元数可以表示为 H= xi + yj + zk + w,其中 i2 = j2 = k2 = -1,ij = k = -jI (公式 2-7) 四元数的另一种表示方法是: H=, 或者 H=,其中 vR3。 (公式 2-8)wzyxwv 如果 H 是一个单位四元数,且 H=,则该四元数相当于绕 v 轴旋转了 2cossinvv 角 同时四元数可以方便地实现两个旋转之间的插值,并且这种插值是沿着球面上的最短弧 线的,较为自然。 欧拉角,四元数和旋转矩阵之间相互转换欧拉角,四元数和旋转矩阵之间相互转换 欧拉角,四元数,旋转变换矩阵,绕任意轴旋转是表示旋转变换的四种方式。四者之间 的转换关系如图 2-2 所示: 欧拉角 绕任意轴旋转 四元数 旋转变换矩阵 图图 2-22-2 四种旋转变换表示方式之间转换四种旋转变换表示方式之间转换 在本文所读取的骨骼文件中,骨骼的旋转数据便是按照欧拉角描述来保存。在读取和保 存数据时,需要按照欧拉角存储,而在处理数据是,可以转换为旋转矩阵或四元数予以处理。 基于人体模型的三维角色控制基于人体模型的三维角色控制 10 第三章第三章 三维建模技术分析三维建模技术分析 3.13.1 人体建模技术分析人体建模技术分析 计算机人体建模技术发展到现在, 已经出现了大量的不同实现方法, 且随着时间的推移, 还可能不断地有一些新方法出现7。到目前为止,三维人体模型的获取有两种办法: (1)基于解剖学的物理模型。这种方法将人体从内到外分成:骨架、骨头、肌肉、脂肪 和皮肤这几个层次,对于各层采用不同的建模技术。比如,骨头层可以被看成刚性物体, 可以采用几何模型;而皮肤层属于最外层,需要较多的真实性,可以采用完全基于物理 的模型,指定皮肤层每个顶点的质量、弹性、阻尼等物理参数,这样就可以计算每个点 的运动特性,从而实现皮肤层的变形。物理模型有很好的真实性,但是复杂,需要大量 的计算资源。 (2)几何模型。采用多边形表面网格、参数化曲面等方法。这种方法把人体看成几何表 面,忽略内部的复杂构造,难以实现真实的动画效果,但是它比较简单,容易控制,需 要的计算量也较小。几何模型的建模方法很多,有线框建模、曲面建模、实体建模和基 于物理的建模等。 下面对这些建模方法作一下简单的介绍。 .1 线框建模线框建模 线框建模是采用点、直线、圆弧、样条曲线等构造三维物体的图形表示技术。它是计算 机图形学 CAD/ CAM 领域中最早用来表示形体的模型, 并且至今仍在广泛应用。线框建模只 用点、线的信息表示一个形体, 数据量少, 定义过程简单, 符合人们打样的习惯。很多复杂 的形体设计往往先用样条勾画出基本轮廓, 然后逐步细化。 线框建模的数据存储量少,对其 编辑、修改非常快。现在的 AUTODESK, 3D STUDIO, MICROSOFT SOFTIMAGE 等三维建模软 件所基于的模型就是线框结构几何模型。但它只是将人体轮廓用线框图形和关节表示, 包含 的信息有限, 因此在三维图形上的进一步处理上有很多麻烦和困难,如消隐、着色、特征处 理等。 基于人体模型的三维角色控制基于人体模型的三维角色控制 11 .2 实体建模实体建模 使用实体建模的方法对人体建模时,它增加了三维人体的实心部分表达,使得模型所保 存信息更加完备,且使模型得到了无二义性描述。另外,实体建模方法还提供了人体几乎所 有的几何和拓扑信息,因此它可以支持人体的消隐、真实感图形的显示。但是有时计算效率 差,因而耗时。目前,实体建模系统中对人体的表达方式主要有以下三种:(1)基于体素 分解的表达方法;(2)构造实体几何;(3)多面体建模。 .3 人体曲面建模人体曲面建模 人体曲面建模法通过物体的各个表面来描述物体特征,它通过物体的顶点、边、表面三 种拓扑元素及其相互间的拓扑关系描述三维物体的形状,将复杂的对象分成不同的曲面部分, 然后进行不同曲面的拼接处理。主要适应于物体表面或曲面具有一定光滑程度但不能用简单 的数学模型进行描述的复杂物体型面。这种建模方法的重点是由给出的离散数据点构成光滑 的过渡曲面,使这些曲面通过或逼近这些离散点。同线框造型法相比,曲面建模法中三维物 体的几何和拓扑关系更完备一些。 由于曲面建模法提供了三维物体的表面信息,因此, 使 用该方法对人体建模时,曲面模型能提供三维人体的表面信息,并进行隐藏线消除和真实感 三维人体模型显示,但由于曲面模型方法没有明确定义三维人体的实心部分,因此曲面建模 方法不能进行剖面操作。目前,对曲面模型的研究主要分为两个方面:一是曲线曲面的表示、 设计、建模显示等,二是与曲面设计方法相关的算法研究,如求交、等距、过渡、拼接、光 顺以及局部操作等。 .4 基于物理的建模基于物理的建模 基于物理的建模方式不同于以上 3 种中建模方式。在以上介绍的建模方式中描述的主要 是人体的外部几何特征,而对人体本身所具有的物理特征和人体所处的外部环境因素(如重 力等)则缺乏描述。基于物理的建模方式引入了这些信息以获得更加真实的建模效果,也增 强了对人体的动态过程进行有效描述的能力。但是在基于物理的建模过程中,通常采用微分 方程组来描述人体的动态运动规律,并进行动态求解,因此,与前面介绍的几种建模方法相 比,基于物理的建模方法在计算上要复杂得多。 在这里我们采用读取由三维建模软件 3D Studio Max 建好的线框模型,对其进行预览交 互操作。 基于人体模型的三维角色控制基于人体模型的三维角色控制 12 3.23.2 外部模型导入外部模型导入 从以上对现有的人体建模技术的分析基础上,本文采用了综合 OpenGL 和 3DS 技术来取得 人体模型的方法。具体步骤如下: 首先,获得 3DS 结构的人体模型文件; 然后,根据 3DS 文件的文件结构,进行文件的读取; 最后,根据读取的三坐标信息进行三维人体的重建,最终形成人体模型。 其中 3DS 文件源于美国 Autodesk 公司推出的 3D Studio Max 三维造型动画软件,它本身 包含了许多冗余的信息。由于需要从中提取自己所需要的三维建模数据以实现模型的再现, 因此分析 3DS 文件,写自己的读写代码显的尤为重要。 .1 3ds3ds 结构文件分析结构文件分析 3DS 文件结构是基于“块”存储的,这些块描述了诸如场景、每个编辑窗口(View port)的状态、材质、网格等。块中又有子块。它们描述了接在它们后面的数据所代表的意 义。 “块”由两部分组成的:ID,即该块所包含的信息;下一个数据块的位置,如表 3-1 所 示。块的这种结构的好处是如果你不明白这个块的用处或对该块的信息不感兴趣的话,可以 直接跳过该块,而不会影响下一个块的读取,因为下一个数据区的相对位置(字节数)已经 得到了8。 表表 3-13-1 3ds3ds 文件块结构文件块结构 块内相对偏移长度名称 02 块的 ID 24 块的长度 6n 数据 6+nm 子块信息 由于至今为止,没有任何一个官方的文件完全说明 3DS 的文件格式,即具体指出每一个 块的 DI 和其含义,所以还有许多未知的块。但这并不影响我们在程序中读入 3DS 文件类型 的模型,因为在读入时,可以根据自己的需要有选择性的读入自己需要的块,而忽略掉那些 基于人体模型的三维角色控制基于人体模型的三维角色控制 13 不感兴趣或未知的块。而这正是块结构的好处。在图 3-1 中,列出了之后读取模型中所需要 的块层次及其相对应的 ID 值。 MAIN3DS (0x4D4D) /* 基本块,位于文件的开始 */ +-EDIT3DS (0x3D3D) /* 编辑块,包含基本的模型几何信息 */ | +-EDIT_MATERIAL (0xAFFF) /* 材质纹理信息块 */ | | +-MAT_NAME (0xA000) /* 材质名称 */ | | +-MAT_DIFFUSE (0xA020) /* 对象材质的颜色 */ | | +-MAT_MAP (0xA000) /* 纹理信息块 */ | | | +-MAT_MAPFILE (0xA300) /*纹理的文件名*/ | +-EDIT_OBJECT (0x4000) /* 对象几何信息块 */ | | +-OBJ_TRIMESH(0x4100) /* 网格对象信息块 */ | | | +-TRI_VERTEXL (0x4110) /*对象顶点信息块 */ | | | +-TRI_ MAPPINGCOORS (0x4140)/*对象的 UV 纹理坐标信息块 */ | | | +-TRI_FACE (0x4120) /*对象面信息块 */ | | | | +-TRI_MATERIAL(0x4130) /*对象材质信息块 */ +-KEYF3DS (0xB000) /*Xrotation -Yrotation。最后用End Site表示一个关节的定义结束,可看成 是一个终端效应器。如图 4-3 所示 HIERARCHY ROOT Hips OFFSET 0.0000 0.0000 0.0000 CHANNELS 6 Xposition Yposition Zposition Zrotation Xrotation Yrotation JOINT LeftHip OFFSET 3.4300 -0.0000 0.0000 CHANNELS 3 Zrotation Xrotation Yrotation , 图图 4-34-3 BVHBVH 文件的骨架信息文件的骨架信息 数据块是以MOTION作为关键字开始,Frames: 定义帧数,FrameTime:定义数据采 样速率。接下来就给出实际的运动数据了,数据的顺序对应骨架信息的层次结构。首先前面 6 个数字保存的是根关节的平移和旋转内容,接下来的数字则标识了按层次的子关节平移数 据。如图 4-4 所示 基于人体模型的三维角色控制基于人体模型的三维角色控制 23 MOTION Frames: 135 Frame Time:0.033333 0.0 0.0 1.0 0.0 0.0 2.0 0.0 0.0 3.0 0.0 0.0 4.0 0.0 0.0 5.0 0.0 0.0 6.0 0.0 0.0 7.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -90.0 0.0 0.0 0.0 0.0 0.0 0.0 图图 4-44-4 BVHBVH 文件的数据信息文件的数据信息 .2 存储存储 BVHBVH 文件内容文件内容 在分析了 BVH 文件结构了后,我们就可以容易的实现数据存取。 由于 BVH 中的骨骼结构是一种层次结构,这里定义了类 Skeleton 和类 Joint 来保存骨架 信息。在类 Skeleton 中只包含指向根节点的 Joint 指针和其他整体骨骼信息,如总帧数、 帧的播放速度、所有关节的运动数据等,而在类 Joint 中则包含了每个关节的初始位移数据, 通道个数,父关节指针,子关节指针,末端效应器位移等。 具体的文件读取流程如图 4-5 所示: 开始读取单词 为 HIERARCH Y 为ROOT 为 MOTION 读取骨骼几何 数据 读取运动数据 读取单词 文件读取错误 读取单词 结束 是 否 否 是 是 否 图图 4-54-5 BVHBVH 文件读取流程图文件读取流程图 其中读取骨骼关节几何数据时,采用递归方法读取代码,具体如图 4-6。 基于人体模型的三维角色控制基于人体模型的三维角色控制 24 开始建立根关节 为JOINT 结束当前关节非空 读取单词 为END 为 为当前关节创建子 关节,设该子关节 为当前关节,并读 取关节几何数据 为当前关节设置末 端效应器 将当前关节的父关 节设为当前关节 否否 否 是 是 是 是 图图 4-64-6 关节几何数据读取流程图关节几何数据读取流程图 这样在读取骨骼几何信息结束后,就生成了以 Joint 类作为节点的一棵骨骼架构树,根 节点记录在类 Skeleton 中。之后读取运动数据信息时,就可以先序遍历这棵骨骼构架树13, 访问所有关节对象,先序遍历访问顺序正好和文件中动作数据顺序相同,便可照此读入关节 在每帧的几何变换数据。 4.44.4 骨骼动作行为实现骨骼动作行为实现 由于整个人体的运动可以分成根节点的平移旋转运动以及其下各子节点绕着父节点的旋 转运动。以对应的关节为支点,每一骨骼都可做有约束的旋转运动,并会带动下层骨骼旋转。 基于人体模型的三维角色控制基于人体模型的三维角色控制 25 这里需要采用两类坐标系来描述人体各肢节的运动:全局坐标系和在各关节处的局部运动坐 标系。我们的目的就是获得各个关节在全局坐标系中的位置,这可以根据对父关节的旋转矩 阵和骨骼长度计算得到。 对于骨骼上的每一个关节,都存在 6 个自由度,包括 x、y、z 坐标上的 3 个旋转数据和 3 个平移数据。在关节的局部坐标系中,关节经历的变换有:(1)将关节局部坐标系按照 z 轴,x 轴,y 轴的顺序旋转对应角度;(2)将坐标系平移,计算出的该关节局部坐标系变换 矩阵就是该关节相对于父关节的局部坐标系进行的变换;(3)将关节的局部坐标系层层递 进,与父关节的局部坐标系变换矩阵相乘,最终获得关节相对于世界坐标的最终坐标。具体 如公式 4-1 所示: V= M * V(公式 4-1) 其中V 表示初始坐标:, V表示最终坐标 1 z y x 1 z y x Mi 表示局部坐标变换矩阵: Mi= (R 表示旋转 Rz*Rx*Ry) (公式 4-2) 1000 Tzi Tyi Txi Ri M 表示世界坐标变换矩阵: M = =(公式 4-3) n i Mi 0 1000 Tz Ty Tx R (绕 X,Y,Z 轴旋转的变换矩阵在 2.2.2 节已进行了介绍。 ) 以上方法得到的就是每个关节的世界坐标变换矩阵,而其中就是每个关 T TzTyTx1 节点在世界坐标系中的最终位置。具体的实现流程图见图 4-6。 基于人体模型的三维角色控制基于人体模型的三维角色控制 26 做绕Y轴旋转 SetRotY() 做绕X轴旋转 SetRotX() 做绕Z轴旋转 SetRotZ() 做平移 SetTranslate() 与父关节旋转变换 矩阵相乘 初始矩 阵 结束 (获得最终变换矩阵) 图图 4-74-7 某关节变换矩阵计算流程图某关节变换矩阵计算流程图 在视图中成像时,只要按层次在对应位置画出骨骼结构,便可形成一个完整的骨骼。具 体实现就相当于遍历骨骼树的每个节点,调用该节点的画图方法,这里我们用一个较粗的圆 柱体表示关节,较长的圆柱体表示关节和关节之间连接,即骨骼。 可以根据每一帧的动作数据获得该时刻每个关节的几何变换矩阵 M,那么只要在程序中 设立定时器,或者派生出一个线程,定时改变整体骨骼的位置信息,刷新视图,就可以实现 骨骼动画。图 4-7 显示某时刻骨骼的行为。 图图 4-84-8 某一时刻的骨骼行为状态某一时刻的骨骼行为状态 基于人体模型的三维角色控制基于人体模型的三维角色控制 27 骨骼动画播放时,可以选择另外一种多帧同时浏览模式。在一帧的绘图过程中增加多个 与它前后相关联的帧的骨骼状态,这样能够更好的观察整体动画上骨骼行为的变化,对该动 画片段的内容有更加直观的认识。图 4-8 描述了多帧浏览模式下某一时刻的骨骼行为。 图图 4-94-9 多帧模式下某一时刻的骨骼行为状态多帧模式下某一时刻的骨骼行

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论