1、 本科毕业论文 (科研训练、毕业设计 ) 题 目: 三维设计在人脸仿真上的应用 姓 名: 学 院:软件学院 系: 专 业:软件工程 年 级: 学 号: 指导教师(校内): 职称: 年 月 日 厦门大学本科毕业论文 - 1 - 三维设计在人脸仿真上的应用 摘要 :本文主要论述本人在学院实习并参与的三维设计在人脸仿 真上的应用项目。 近 年来计算机技术的飞速发展,推动了设计方法及观念的不断变革,其中三维建模技术的崛起及成熟给设计师带来了全新的视野。有了这样的 先进工具,设计师可 在短时间内创建出产品的精确模型,并 以实时方式对模型参数进行修改或给模型加上颜色及质地,把设计理念像 照片一样真实地展现
2、出来,从而可轻而易举地获得多种不同的设计款式。 本项目 在虚拟现实环境下,应用 OpenGL 技术, 对人脸建立物理 建 模及其动画合成,并采用纹理粘贴等手段,来仿真真实人脸的模型 。 本 文阐述的是本人负责的在 OpenGL 环境下对 3ds max 建出的模型进行重新构建并在 VC 环境中仿真的过程。 该系统能在廉价的 PC 平台上实现,快速、 简单而且具有真实感 。实验结果表明,基于OpenGL 技术应用 对人脸建模及其动画合成,其仿真效果真实、自然, 能够满足实际多媒体系统对友好人机交互的要求。 关键词 : 3ds max 建模 OpenGL 界面设计 三维 厦门大学本科毕业论文 -
3、2 - The application of Three-Dimension design in face emulation Abstract: This paper summarizes my in-campus-practice work during this semester, which is mainly about the application of Three-Dimension design in face emulation. Recently, the booming development of computer technology continually cau
4、ses revolutionary change in design concepts and methods, among which, the appearance, growth and maturity of Three -Dimension modeling technology demonstrates the designer an exciting new world. With the help of this advanced tool, designers can easily establish the exact model of certain product in
5、 a short time, make some modification to the model parameter or even add some color and texture to model itself in a real-time environment. As a result, the design concepts can be manifested really just like a photograph, and then many various design styles can be obtained without any difficulty. Th
6、is project aims to simulate the real human faces through the building of the physical model and the methods of texture sticking (with OpenGL technology and under virtual-realize environment). The following paper expatiates on the process of reconstructing the existing model (built from 3DSMax under
7、the environment of OpenGL) and the emulating this model in the VC environment, which is the main work of my charge. This system, with the advantages of celerity, simpleness and reality only needs personal computer as its realization platform. The experiments indicate that the effect of this new mode
8、ling method (based on OpenGL technology) achieves a natural and real quality, and thus can satisfy the demand of man-machine intercourse in daily multimedia systems. Key Word: 3ds max modeling openGL interface-designed three-dimensional 厦门大学本科毕业论文 - 3 - 目 录 1 引 言 - 4 - 2 系统总体设计 - 4 - 2.1 需求概述 - 4 -
9、2.2 开发工具及运行环境 - 4 - 2.3 处理流程 - 4 - 3 系统详 细设计 - 5 - 3.1 人脸建模阶段 - 5 - 3.1.1 人脸的创建 - 5 - 3.1.2 完善人头模型 - 5 - 3.1.3 创建头发的模型 - 6 - 3.1.4 优化模型 - 6 - 3.2 导入转换阶段 - 7 - 3.2.1 创建 OpenGL 窗口 - 8 - 3.2.2 设置光源 - 15 - 3.2.3 设置材质 - 16 - 3.2.4 定义投影方式 - 16 - 3.2.5 创建多边形 - 17 - 3.3 设计界面阶段 - 18 - 4 OPENGL 的基础知识以及功能特性的介绍
10、 - 18 - 5 尚待解决的问题 - 19 - 结论 - 19 - 致谢语 - 20 - 参考文献 - 20 - 厦门大学本科毕业论文 - 4 - 1 引 言 人脸作为人体的门户,是人体上最具表达力的一部分,在人类的交流中占据着举足轻重的地位。从人脸上我们不但可以识别出人的身份,还可以观察出它的喜怒哀乐,推断出他的个性等。 本论文论述的是三维人脸仿真项目的详细说明书,是本人在此项目中所负责的程序设计说明,主要阐述程序的设计思路、算法、功能扩展以及程序的具体结构、输入输出等。 程序建模 部分采用三维设计工具 3dmax,并在 OpenGL 环境中转换这些数据重新构建三维模型。 同时 可以在人脸
11、制作相应的头发贴图,模拟出各种发型的真实效果,作为人脸仿真在美容美发上的应用。 2 系统 总体设 计 2.1 需求概述 设计出较为逼真的人脸模型,并在人脸上根据要求模拟出发型的逼真效果。 2.2 开发工具及运行环境 操作系统: windows xp 使用工具: 3ds max 7.0 开发环境: microsoft visual c+ 6.0 2.3 处理流程 一 建模阶段 在 3DS MAX 中建立头部(包括人脸及后脑勺) 的模型 二 导入转换阶段 在 VC 中将模型转换成 OpenGL 格式 三 设计 界面阶段 在 VC 环境中编写出可视化界面,使界面尽量友好 厦门大学本科毕业论文 - 5
12、 - 3 系统 详细设计 3.1 人脸建模阶段 在这里需要使用工具 3ds max 7.0 工具简介: 3DS MAX 是由美国 Autodesk 公司推出的基于个人电脑的三维动画设计和制作软件。 目前世界上应用最广泛的三维建模,动画,渲染软件,完全满足制作高质量动画,最新游戏,设计效果等领域的需要。 他所生成的图形文件格式是 3DS 文件格式,此格式是一种很普遍的数据格式,以 3DS 保存 的三维图形文件非常丰富。我们可以在计算机上直接利用 3DS MAX 软件制作 3DS 格式的三维图形,并通过读取和操作 3DS 文件达到我们的目的。 3.1.1 人脸的创建 启动 FaceGen,并调节各
13、项参数,建立一个初步的人头模型。并将其保存为 3DS 文件格式。 FaceGen 是一个参数化的三维人头模型建立工具 。 图 1 人脸模型 3.1.2 完善人头模型 厦门大学本科毕业论文 - 6 - 将建立的人头模型导入到 3dmax7.0 中,采用 3dmax 的建模工具和命令对模型进行调整使其更逼真,主要用到的 命令有多边形挤压命令,多变形修改命令,镜像半边命令。并设置模型的皮肤纹理贴图。 3.1.3 创建头发的模型 图 2 头发模型 3.1.4 优化模型 用 3dmax7.0 的 hairFX 插件进一步优化和完美头发的模型,使其数据量更小,材质更逼真。 形成的模型样品图样 图 3 样品
14、 a 图 4 样品 b 厦门大学本科毕业论文 - 7 - 模型建成后得到的是一个 3ds 格式的文件,简要介绍一下 3ds 文件 : 3DS 文件由许多块组成,每个块首先描述其信息类别,即该块是如何组成的。块的信息类别用 ID 来标识,块还包含了下一个块的相对位置信息。因此,即使不理解一个块的含义,也可以很容易地跳过它,因为该块中指出了下一个块地相对于改块的起始位置地偏移字节数。与许多文件格式一样, 3DS 二进制文件中的数据也是按低位在前,高位在后的方式组织的。例如, 2 个十六进制字节 4A 5C 3B 8F,表明 5C 4A 是低位字节,而 8F 3B 是高位字节。 块的前两项信息 分别
15、是:块的 ID 和块的长度(也即下一个块相对于改块的字节偏移量),块的 ID 是一个整形数,而块的长度是一个长整形数。每个块实际上是一个层次结构,不同类型的块,其层次结构也不相同。 3DS 文件中有一个基本块,其 ID 是 4D 4D,每一个 3DS 文件的开头都是由这样一个块构成。基本块内的块称为主块。 3.2 导入转换阶段 此阶段的关键是 OpenGL 在人脸建模中的应用。 OpenGL 在 Windows 平台上主要有以下几个图库 : 基本库 opengl32. lib , 头文件为 gl. h , 函数共有 100 多个 ,都是最基本 ,最重要的函数 ,函数前缀为 gl 如画点函数 g
16、lVertex) ; 实用库 glu32. lib , 头文件为 glu. h , 其中函数功能相对高级 ,如绘制复杂的曲线曲面 ,高级坐标变换 ,多边形分割 (polygonal tessellation) 。一共有 40 多个。前缀为 glu(如 NURBS 曲面函数 gluNurbsSurface) ;辅助库 glaux. lib , 头文件为 glaux. h , 是一些鼠标、键盘控制、窗口管理等简单的交互函数和常用三维物体的绘制函数。一共有 30 多个。前缀为 aux如窗 口初始化函数 auxInitWindow) 。由于简单 ,大型的 OpenGL 程序很少使用到这一套函数。近年来
17、 ,OpenGL 的编程者比较多地使用到一个叫实用工具库glut32. lib , 头文件 glut. h 。辅助库可以看作是实用工具库的一个子集。工具库还提供了许多辅助库没有的功能 ,如菜单操作等。前缀为 glut 如菜单创建函数 glutCreateMenu) 。 此外 ,还有六个 WGL 函数非常重要 ,专门用于 OpenGL 和 Windows 窗口系统的联接 , 其前缀为 wgl , 主要用于创建和选择图形操作描述 (renderingcontexts) 以及在窗口内任一位置显示字符位图。 厦门大学本科毕业论文 - 8 - 一个 OpenGL 的 Windows 应用程序的基本操作步
18、骤如下 : 创建 OpenGL 的着色环境包括设定象素格式 ,创建着色环境 ,把着色环境指定为当前的着色环境 ;进行 OpenGL 相关的初始化 ,如设立灯光 ,质材 ,纹理 , 变换等等 ;绘制图形 ;将着色环境设为非当前使用 , 释放着色环境。 3.2.1 创建 OpenGL 窗口 #include / Windows 的头文件 #include / OpenGL32 库的头文件 #include / GLu32 库的头文件 #include / GLaux 库的头文件 设置计划在 程序中使用的所有变量。 第一行设置的变量是着色描述表( Rendering Context)。每一个 Ope
19、nGL 都被连接到一个着色描述表上。着色描述表将所有的 OpenGL 调用命令连接到设备描述表( Device Context)上。还需要创建一个设备描述表,也就是第二行的内容。第三行的变量 hWnd 将保存由 Windows 给我们的窗口指派的句柄。最后,第四行为我们的程序创建了一个 Instance(实例)。 HGLRC hRC=NULL; / 永久着色描述表 HDC hDC=NULL; / 私有 GDI 设备描述表 HWND hWnd=NULL; / 保存我们的窗口句柄 HINSTANCE hInstance; / 保存程序的实例 下面是重新设置 OpenGL 场景的大小,而不管窗口的大
20、小是否已经改变(假定没有使用全屏模式)。甚至无法改变窗口的大小时(例如在全屏模式下),它至少仍将运行一次 在程序开始时设置我们的透视图。 OpenGL 场景的尺寸将被设置成它显示时所在窗口的大小。 GLvoid ReSizeGLScene(GLsizei width, GLsizei height) / 重置并初始 化 窗口大小 厦门大学本科毕业论文 - 9 - 下面 为 透视图设置屏幕 。意味着越远的东西看起来越小。这么做创建了 一个现实外观的场景。此处透视按照基于窗口宽度和高度的 45 度视角来计算。 0.1f, 100.0f 是我们在场景中所能绘制深度的起点和终点。 投影矩阵负责为我们的
21、场景增加透视。 glLoadIdentity()近似于重置。它将所选的矩阵状态恢 复 成 其 原 始 状 态 。 调 用 glLoadIdentity() 之后我们为场景设置透视图。glMatrixMode(GL_MODELVIEW)指明任何新的变换将会影响模型观察矩阵( modelview matrix)。模型观察矩阵中存放了我们的物体讯息。最后我们重置模型观察矩阵。 glMatrixMode(GL_PROJECTION); / 选择投影矩阵 glLoadIdentity(); / 重置投影矩阵 / 计算窗口的外观比例 gluPerspective(45.0f,(GLfloat)width/
22、(GLfloat)height,0.1f,100.0f); glMatrixMode(GL_MODELVIEW); / 选择模型观察矩阵 glLoadIdentity(); / 重置模型观察矩阵 接下 来 , 对 OpenGL 进行所有的设置。我们将设置清除屏幕所用的颜色,打开深度缓存,启用阴影平滑( smooth shading),等等。这个例程直到 OpenGL 窗口创建之后才会被调用。 int InitGL(GLvoid) / 此处开始对 OpenGL 进行所有设置 以下 启用阴影平滑( smooth shading)。阴影平滑通过多边形精细的混合色彩,并对外部光进行平滑。我将在另一个教程中更详细的解释阴影平滑。 glShadeModel(GL_SMOOTH); / 启用阴影平滑 以下 设置 清除屏幕时所用的颜色 。色彩值的范围从 0.0f 到 1.0f。 0.0f 代表最黑的情况,1.0f 就是最亮的情况。 glClearColor 后的第一个参数是红色分量( Red Intensity),第二个是绿色,第三个是蓝色。最大值也是 1.0f,代表特定颜色分量的最亮情况。最后一个参数是 Alpha
Copyright © 2018-2021 Wenke99.com All rights reserved
工信部备案号:浙ICP备20026746号-2
公安局备案号:浙公网安备33038302330469号
本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。