舞蹈动作的设计与实现毕业论文.doc_第1页
舞蹈动作的设计与实现毕业论文.doc_第2页
舞蹈动作的设计与实现毕业论文.doc_第3页
舞蹈动作的设计与实现毕业论文.doc_第4页
舞蹈动作的设计与实现毕业论文.doc_第5页
已阅读5页,还剩60页未读 继续免费阅读

下载本文档

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

文档简介

本科生毕业论文(设计)题 目:基于骨骼模型的舞蹈动作的设计与实现学 院: 计算机与信息技术学院 专 业: 计算机科学与技术(动画与游戏软件方向)班级序号: 学 号: 学生姓名: 指导教师: 2011年5月目 录摘 要:1abstract:2前言31绪论41.1课题背景41.2相关技术特点41.3国内外在该领域开发及应用的现状及分析51.4 visual c+ 特点61.5 opengl 特点61.6 项目开发环境概述61.7 论文主要内容71.8 本章小结72 需求分析与系统总体设计82.1需要的结构体和类的含义82.2程序功能框架92.3程序概要设计简介92.4程序执行流程图102.5系统设计特点介绍112.6本章小结113 程序详细设计123.1 建立三维基础模型123.2 建立win32工程123.3 创建资源文件133.3.1创建菜单143.3.2创建对话框143.4 三维模型的载入153.5 三维模型骨骼的控制163.6 opengl的简单应用173.6.1平移变换173.6.2旋转变换173.6.3平移变换和旋转变换的关系173.7 三维模型舞蹈动作的设计183.8 过渡函数的设计23 3.9灯光效果的设计243.9.1 关于光照效果243.9.2 本例中的聚光灯效果253.10 消息响应的设计263.11 本章小结274 结论28参考文献29致 谢30ii基于骨骼模型的舞蹈动作的设计与实现的研究基于骨骼模型的舞蹈动作的设计与实现的研究摘 要:随着计算机在人们生活中的普及,计算机仿真技术应用的发展方向也已涉及到人们生活中的方方面面。其中包括军事、工业、医疗、生活娱乐。本例中设计骨骼模型的舞蹈,对人物在3d场景中的控制,尤其是对于3d场景以及人物在动画、游戏、影视中的应用有一定意义。本文对骨骼模型的舞蹈动作的设计与实现进行了研究,就是为了使三维人物在动画,以及影视中能够更好的运用。程序框架采用windows平台下的visual studio 2008开发工具中的win32程序框架,使用c+面向对象编程语言,并基于opengl来实现虚拟人环境,添加消息响应机制,实现人机交互,鼠标以及键盘操作。点击鼠标左右键可以控制模型绘制模式,键盘按键可以控制观察角度。本文设计了一段舞蹈的动作的关键动作,并通过一定的算法使其连贯成为一段连续的舞蹈。通过选择菜单弹出对话框控制舞蹈的开始,舞蹈动作变换过程中设计了一个过渡函数,使得两种舞蹈动作之间可以自由过渡,不会产生跳帧现象,同时可以选择连续动作使得虚拟人产生连续动画效果。并设计了一个三维场景,其中包括灯光效果。在本例中还配合了音乐效果,使其尽可能的接近可产品化的程度。关键词:opengl 人体语言 舞蹈 合成 运动约束abstract:along with the computer in people living in popular, the computer simulation technology application development direction was also has related to all aspects in peoples lives. including military, industrial, medical, life entertainment. this example design model skeleton of the dance, the control characters in a 3d scene, especially for 3d scene as well as characters in animation film, games, the application of some significance. in this paper the skeleton model design and implementation of the dance movement was studied, in order to make 3d characters in animation film, and can better use. program frame of lans by the visual studio windows 2008 development tool, using win32 program frame of c + + an object-oriented programming language, and based on virtual person opengl to environment, add a message response mechanism, realize human-machine interaction, mouse and keyboard. click the mouse button around can control model drawing mode, clavier key-press can control observation angle. this paper introduces the design of a dance movements, and the key actions through certain method makes its coherent become over a continuous dance. through the options menu popup dialog control dance, dance movements transform the beginning of a process of transition function design, make two dance moves between free transition, wont produce jump frame phenomenon, also can choose continuous action makes virtual person generation successive animation effects. and designs a 3d scene, including lighting effects. in this case also cooperate with the music effect, make its close as possible can prod degree.keywords:opengl body language dance recognition synthesis exercise constraint 前言“基于骨骼模型的舞蹈动作的设计与实现”的论文设计主要使用visual studio 2008软件环境下的win32编程模式,模拟人体舞蹈动作。在本设计中主要实现在3dsmax软件工具下创建基础模型,导出为3ds文件,在win32框架下编写程序导入三维模型,并对模型需要变化的部位进行变位动作控制。设计关键动作,关键动作之间的过渡函数,以及设计菜单控制对话框,实现骨骼模型的舞蹈动作。为了使本例尽可能的接近“产品”的要求,除了对程序的基本框架,以及算法的设计以外,还添加了音乐,灯光的场景效果。因此,我在网络上找到了一个视频,对其内容进行了模仿。当然也进行了自己的一些设计在本例中。所以本例中的舞蹈动作基本是以该视频为基础,对其进行了一定的修改,最终出来了本例的效果。对于产品讲究的是其使用性,与其价值。而作为一个动画舞蹈产品,最重要的自然就是美感,这其中必不可少的要讲到仿真技术。除了人体动作方面的仿真,要想得到接近于真实的效果,音乐和场景是舞蹈中的重要组成部分。我参考选取了视频中的音乐,对舞蹈场景也做了一番设计。在实现中虽然遇到了一些问题,但还是有一定的进展。本论文对国内外舞蹈研究的背景进行了介绍。国内外很多影视企业、动画公司、动画工作室和研究机构都在对全三维角色动画进行研究。国际几家知名动画公司掌握着三维动画的高端技术。他们生产的动画影片动作生动、细腻,有些影片甚至可以让肌肉、皮肤的运动都表现得栩栩如生。在国内,三维动画的制作刚刚起步,不少企业、高校对三维动画开始进行研究,然而这些研究往往停留在三维模型,或是三维特效上,至于难度最高的全三维角色动画,一直鲜有人敢于尝试。面向几乎真空的国内市场,以全三维数字影片为目标,面临着机遇与挑战。1绪论本例主要是基于骨骼模型的舞蹈动作的设计与实现。设计了骨骼模型的舞蹈动作,并对舞蹈场景效果进行了仿真。在其中添加了灯光效果,以及音乐。对相关领域研究背景,国内外在该领域的发展现状及分析,以及论文设计的主要内容等方面进行了简单的阐述。1.1课题背景舞蹈是八大艺术之一,是于三度空间中以身体为语言作“心智交流”现象之人体的运动表达艺术,一般有音乐伴奏,以有节奏的动作为主要表现手段的艺术形式。它一般借助音乐,也借助其他的道具。舞蹈本身有多元的社会意义及作用,包括运动、社交/求偶、祭祀、礼仪等。有的学者认为,人由模仿的本能,舞蹈是人用有节奏的动作对各种野兽动作和习性的模仿。有些舞蹈还是对一些自然景物动态形象的模仿,如柳枝的摇曳、海浪的翻滚、风的飘荡旋转等等,人们都可以模仿它们进行舞蹈。1.2相关技术特点人体舞蹈的研究主要体现在两个方面,一是人体舞蹈的动作,二是场景的仿真。人体的舞蹈动作,通过对关键动作的设计,将一个完整的舞蹈分解为若干个关键动作。在设计舞蹈动作的处理上,我们要关注的几个技术点是:骨骼的加载,纹理的映射,加载后骨骼的坐标位置以及变换,关键动作的分解,将分解后的动作连接成一个完整的舞蹈动作。在设计场景的仿真的处理上,我们要关注的几个技术点是:世界坐标系的建立和人物坐标系的建立,骨骼在世界坐标系中的变换和人物坐标系中的变换,灯光效果的仿真。其中比较重要的技术代码为骨骼的加载,将分解后的动作连接成一个完整的舞蹈动作,以及灯光效果的实现。1.3国内外在该领域开发及应用的现状及分析目前,国内外很多影视企业、动画公司、动画工作室和研究机构都在对全三维角色动画进行研究。国际几家知名动画公司掌握着三维动画的高端技术。他们生产的动画影片动作生动、细腻,有些影片甚至可以让肌肉、皮肤的运动都表现得栩栩如生。而角色的运动究竟是怎么控制的,这技术一直秘面不宣。对外公布的资料只有“动作调节”、“动作捕捉”、庞大的制作阵容,以及上亿美元的投资,如此这般。而一部影片的制作时间也往往需要三年,甚至五年之多。美国的discreet公司人体工学研究所提出的character三维角色动作模型,已成为三维角色动画软件开发组织所用开发角色运动的重要参考模型。它通过cak的骨骼控制系统,可以指导三维动画师控制与调节三维角色的肢体动作。通过基于骨骼的角色控制系统使得角色动作的控制流程变得切实可行。通过使用此工具,三维动画师可以根据自己的需要在三维角色模型动作标准运动的基础上,定制适合的特定软件控制运动。该工具支持基于动作捕捉,动力学运算和手工控制的多种控制方法。同时,对于建模的运动与配置后可以做成插件进行发布。其中,动作捕捉技术是一种成本高昂的动画控制技术,通过捕捉真实的人或动物的动作,来记录每一帧、每一关节的动作数据,并输入给三维模型。其成本高昂、动作要求高、信号易被干扰和遮挡,拥有诸多不尽人意的弱点。手工调节三维角色动作的方法,就是通过动画师手工调整角色的动作,姿态。对于一个动作,需要逐个关节,逐个画面进行调整。操作十分繁琐复杂,过程中非常容易出现错误,导致返工。而且,cak所支持的角色动作控制仅仅是基于cak自身模型的,并不能完全按照动画师的要求定制最适合的角色运动模型。此外,对于外部输入的动作数据信息的处理不支持特定的动作控制流程。从而可知,尽管三维角色动画的技术目前日益普及,日益完善,可是对于将该理论应用于实践的软件、工具、方法等方面,仍有很大的提高余地。在国内,三维动画的制作刚刚起步,不少企业、高校对三维动画开始进行研究,然而这些研究往往停留在三维模型,或是三维特效上,至于难度最高的全三维角色动画,一直鲜有人敢于尝试。面向几乎真空的国内市场,以全三维数字影片为目标,面临着机遇与挑战。1.4 visual c+ 特点microsoft visual studio 2008是面向windows vista、office 2007、web 2.0的下一代开发工具,代号“orcas”,是对visual studio 2005一次及时、全面的升级vs2008引入了250多个新特性,整合了对象、关系型数据、xml的访问方式,语言更加简洁。使用visual studio 2008可以高效开发windows应用。设计器中可以实时反映变更,xaml中智能感知功能可以提高开发效率。同时visual studio 2008支持项目模板、调试器和部署程序。1.5 opengl 特点opengl(全称open graphics library)是定义了一个跨编程语言、跨平台的编程接口规格,它适用于三维图象(亦可适用于二维)技术。opengl是一个专业的图形程序接口,是一个功能强大、调用方便的底层图形库。opengl实际上是一个开放的三维图形软件包,它独立于窗口系统和操作系统,以它为基础开发的应用程序可以十分方便地在各种平台间移植。可以在不同的平台如windows 95、windows nt、unix、linux、macos、os/2之间进行移植。因此,支持opengl的软件工具有很好的可移植性,可以获得非常广泛的应用。由于opengl是图形的底层图形库,没有提供几何实体图元,不能直接用以描述场景。但是,通过一些转换程序或者自行编写的接收外部图形元件类,可以很方便地将autocad、3ds/3dsmax等3d图形设计软件制作的dxf和3ds模型文件转换成opengl的顶点数组,导入到opengl虚拟场景中进行绘制。opengl可以与visual c+紧密接口,便于实现人体动作的有关计算和图形算法,可保证算法的正确性和可靠性。opengl有使用简便、效率高等特点,它具有建模、变换、颜色模式设置、光照和材质设置、纹理映射、位图显示和图像增强、双缓存动画等七大功能。1.6 项目开发环境概述系统硬件开发环境如下:cpu pentium 3500以上memory 512mb以上系统软件开发环境如下:windows xpmicrosoft visual studio 20081.7 论文主要内容本论文主要采用visual studio 2008应用软件下的win 32 api框架编写程序,并基于opengl图形接口模拟虚拟三维场景。本文按照对“基于骨骼模型的舞蹈动作的设计与实现”的需求分析、总体设计、详细设计的模式来介绍程序设计的实现过程。对tface,tmaterialinfo,t3dmodel等几个主要结构体以及灯光效果和skeleton,rotation类的定义和实现方法进行了简单的阐述,并对程序结构设计过程的实现进行了整体的描述。1.8 本章小结本章是论文的绪论部分,介绍了“基于骨骼模型的舞蹈动作的设计与实现”的课题背景及其研究现状,并对其进行了简要的分析,同时还介绍了相关的开发环境的需要,主要开发语言,以及应用接口,从中我们可以简单的了解论文的一些基本情况。2 需求分析与系统总体设计本设计的主要任务是在visual studio 2008环境下完成“基于骨骼模型的舞蹈动作的设计与实现” 。在设计的过程中,需要将外部三维模型导入到程序的虚拟环境中,设计消息响应机制,设计舞蹈关键动作,并设计关键动作之间的过渡函数,添加菜单以及消息对话框对三维虚拟人舞蹈动作进行控制。从而完成舞蹈动作的变换,产生连续可变换的舞蹈显示。2.1需要的结构体和类的含义载入3d文件类: cload3ds,将需要载入的3d文件中的模型所需绘制的对象的相关数据封装到这个类中。如读字符串、块、对象块、材质块、对象颜色的rgb值、对象的顶点、对象的面信息、对象的纹理坐标、对象的材质名称,计算对象顶点的法向量,关闭文件并释放内存空间等等。模型控制类:skeleton,将模型绘制的部件,模型绘制时需要的模式等相关数据封装在这个类中。如本论文中的模型分为身体、左右上臂、左右前臂、左右手腕、左右手的各个关节手骨、左右大腿、左右小腿以及左右脚等的主要成员方法都封装在这个类中。模型骨骼旋转控制类: rotation,将有关于模型的骨骼旋转需要的方法封装到这个类中。其中包括获取旋转角度,初始化记忆角度,获取记录中间角度,骨骼角度过渡变换控制等相关方法。相关结构体的定义: tface,对象面的结构体定义。定义顶点索引变量以及纹理坐标索引变量。tmaterialinfo,对象材质信息的结构体定义。定义纹理名称,表示纹理文件名称,定义对象的rgb颜色,定义纹理id,定义uv重复以及uv纹理偏移。t3dobject,对象信息的结构体定义。定义模型中顶点的数目,定义模型中面的数目,定义模型中纹理坐标的数目,定义纹理id,定义纹理映射状态,定义对象的名称,定义对象的顶点,定义对象的法向量,定义纹理uv坐标,以及定义对象的面信息。t3dmodel,模型信息的结构体定义。定义模型中对象的数目,定义模型中材质的数目,定义材质链表信息,定义模型中对象链表信息。2.2程序功能框架图2-1 程序功能框架程序运行后,可以在菜单中选中要操作的选项,对应的选项会弹出对应的对话框。可以对人体模型进行变换操作,每一种选择都对应一个舞蹈动作。当操作者不会操作时看看帮助中的操作帮助即可。当操作者想要关闭窗口时,可以直接关闭窗口,可以在菜单的选项中选择退出,也可以直接按esc键退出。2.3程序概要设计简介本程序的目标是骨骼模型的舞蹈动作的设计与实现,因此设计了载入3d文件类cload3ds,模型控制类skeleton,模型骨骼旋转控制类rotation这三个主要的类。为配合载入3d外部文件,还设计了tface、tmaterialinfo、t3dobject、t3dmodel等几个结构体,负责记录读取3d文件信息。本程序为三维模型设计了一系列的关键动作,几乎包括了人体所有关节的控制。在这些舞蹈关键动作的控制过程中,可以分别对虚拟人的左右手进行操作,根据对话框选中的信息在模拟数据库中查找相应的数据信息,反应给虚拟人,在屏幕上产生舞蹈关键动作变换。2.4程序执行流程图 图2-2 程序流程图2.5系统设计特点介绍在“基于骨骼模型的舞蹈动作的设计与实现”的设计中,采用visual studio 2008的开发环境中的win 32 模式框架设计模块,图形控制和处理接口采用opengl接口。将舞蹈动作的关键数据保存在虚拟数据库中,初始骨骼基本位置,通过对话框上控件资源的消息响应获取对应数据位置,将新的舞蹈动作位置放入中间过渡函数中,经过加工处理,虚拟人舞蹈动作动作平缓过渡到下一个舞蹈动作。2.6本章小结本章主要介绍程序的基本功能框架结构和主要的程序开发流程,对主要的几个类以及结构体进行了简要的介绍,并且还介绍了一些本设计的设计特点以及设计内容。通过本章的概要描述,读者可以对本设计有一个初步的了解。3 程序详细设计3.1 建立三维基础模型首先在3dsmax软件环境中创建一个新的工程,取名为skeleton,利用基础模型拼出基本骨骼模型,再通过挤压变形等复杂处理后形成骨骼模型,运行结果如图3-1。图3-1 三维骨骼模型的建立3.2 建立win32工程在visual studio 2008软件环境中创建一个win32 application类型的空的工程,取名为fingerlanguage,新建main.h头文件、init.cpp和main.cpp文件。其中main.h头文件中包含主程序需要引用的外部头文件,必要的结构体的定义,以及一些必要的方法的定义。init.cpp文件负责创建窗口,初始化窗口,以及窗口状态的判断。main.cpp文件负责程序的主体运行。创建窗口的初始化设置:wndclass.style = cs_hredraw | cs_vredraw;/使用c的按位“或”操作符组合了两个“类风格”标识符wndclass.cbclsextra = 0 ;/预留空间wndclass.cbwndextra = 0 ;/预留空间wndclass.lpfnwndproc = winproc;/将窗口类的窗口过程设置为winprocwndclass.hinstance = hinstance;/实例句柄wndclass.hicon = loadicon(null, idi_application);/为窗口设置一个图标wndclass.hcursor = loadcursor(null, idc_arrow);/加载一个预先定义的鼠标光标(命名为idc_arrow),并返回该光标的句柄wndclass.hbrbackground = (hbrush) (color_window+1);/设置窗口颜色wndclass.lpszclassname = gametutorials;/设置类名wndclass.lpszmenuname= (lpcstr)idr_menu1;/指定窗口菜单registerclass(&wndclass);/注册窗口类调用创建窗口函数,定义窗口名称为“3d finger language” ,创建窗口,运行结果如图3-2。图3-2 创建的初始窗口3.3 创建资源文件在文件选项中选中“新建” ,新建一个资源脚本文件,如图3-3所示。图3-3 创建资源脚本文件3.3.1创建菜单菜单在计算机程序中是出现在显示屏上的选项列表,通常点击菜单会弹出对话框。在资源脚本文件中插入菜单(menu),建立一个名为idr_menu1的菜单。并在菜单中添加“选项” 、“帮助”等菜单选项。在“选项”列表里添加“选择舞蹈动作” 、“选择舞蹈” 、“退出”等选项,在“帮助”列表里添加“关于” 、“操作帮助”等选项。3.3.2创建对话框对话框(如图3-4)是一种次要的窗口,包含按钮和各种选项,通过它们可以完成特定的命令和任务。图3-4 创建对话框在资源脚本文件中插入对话框(dialog),根据菜单中的不同选项列表,我们需要创建多个对话框。其中有,关于对话框,帮助对话框,选择分解动作对话框,选择舞蹈动作对话框。图3-5至图3-6是分别对菜单中对应的对话框进行的设计。图3-5 选择舞蹈动作对话框 图3-6 操作帮助对话框 3.4 三维模型的载入创建3ds.h头文件,此文件与三维模型的载入密切相关。在此头文件中定义cload3ds类,该类包括打开3d文件的方法、字符串的读入、块的读入、对象块的读入、材质块的读入、对象颜色rgb值信息的读入、对象顶点信息的读入、对象纹理坐标信息的读入、对象材质名称的读入、对象顶点法向量的计算以及关闭文件并释放内存空间的方法等等。将需要变换的身体部件在3dsmax软件中进行拆分,并分别保存。由于需要载入的三维文件数量较多,因此需要将这些零散部件加以整理,方便程序中的调用。创建一个add3ds.h头文件,在此头文件中定义skeleton类,将骨骼零部件需要的方法集中在这个类中。在skeleton类中包含模型的绘制模式的定义以及绘制模式的设置和获取,以及骨骼模型身体各个部件的绘制方法。如一个手掌上的手指需要有运动变换,那么就将这些手指在虚拟场景中分别绘制,再加以变换。载入到opengl三维虚拟场景中的三维骨骼模型如图3-7。图3-7 载入到虚拟场景中的三维骨骼模型3.5 三维模型骨骼的控制创建database.h头文件,此文件包含虚拟数据库信息。将虚拟人需要转动的方向编号,并根据编号位置设置旋转角度,组成一个个关键动作,将每一个关键动作分别存放在左侧肢体数组和右侧肢体数组中。为了更方便的控制三维模型以及方法的重用,定义一个rotation类,将需要获取的左右肢体角度信息的获取方法,记忆角度信息的方法,角度中间过渡的方法等封装在这个类中,当需要调用角度变换的时候,即可方便调用。3.6 opengl的简单应用本设计使用glulookat()函数改变场景的观察角度。设计三个变量,分别对模型进行近视、远视、俯视、仰视、左视、右视进行观察。使用gltranslatef()函数对场景中的模型坐标进行上下左右的移动,方便观察。按下鼠标左键改变模型的绘制模式,按下鼠标右键改变场景的光照模式。glulookat(gviewposx, gviewposy, gviewposz,gviewdirx, gviewdiry, gviewdirz,gviewupdirx, gviewupdiry, gviewupdirz)函数中的前三个变量的改变可以改变观察者的位置,中间三个变量的改变可以改变观察者视角的方向,最后三个变量的改变可以改变观察的正方向。3.6.1平移变换gltranslatefd(typex, typey, typez)函数的平移变换是在模型矩阵中进行的,所以在实行几何变换的时候,如果不能确定当前的操作矩阵是模型矩阵,就要使用glmatrixmode()函数来指定当前操作的矩阵类型,执行这个函数的结果相当于将当前m =1 0 0 x0 1 0 y0 0 1 z0 0 0 1的模型变换矩阵乘以矩阵并把结果置为当前的模型变换矩阵,相当于把坐标原点移动到(x,y,z)所指的位置。该函数移动的是坐标系,而不是物体。3.6.2旋转变换glrotatefd(type angle, typex, typey, typez)函数中第一个参数是表示目标沿着从点(x,y,z)到原点的方向逆时针旋转的角度,后三个参数是旋转的方向点坐标。这个函数表示用这四个参数生成的矩阵乘以当前的矩阵,当角度参数是0.0时,表示对物体没有影响。该函数旋转的也是坐标系,而非物体本身。3.6.3平移变换和旋转变换的关系先平移后旋转,从观察者的角度来看,物体的平移方向和旋转方向和没有平移旋转变换之前是相同的。先旋转后平移,由于旋转后坐标系方向改变了,因此再次平移就是沿着新的坐标系方向平移变换,所以观察者再次看到的变换方向就和原来的方向不同了。在本设计中,因为要模拟骨骼转动,因此先要将坐标系的原点移动到旋转点上,使得肢体绕着该点旋转,然后将坐标系原点位置归还为初值。即先平移,再旋转,然后再平移回来。这样,既可以使得肢体绕固定点旋转,又不影响其他身体部件位置的改变,从而模拟虚拟人的骨骼旋转变换。3.7 三维模型手势的设计在本设计中,设计了多个关键手势,并对左右手分别进行了设计,可以分别控制左右手的变换。关于左右手分别控制在对话框中的设计,我们仅以“选择手势”对话框为例。在菜单选项中选择“选择手势”的菜单,弹出对话框,进行对手势的分别选择。在对对话框的设计过程中,每一个控件在资源文件中都有定义了一个特定的值,在设计的过程中,这些值在同一个对话框中都是连续的,而在程序中对其调用的时候减去多余的值即是数组中的对应值,从而达到调用关键手势数据的效果。lresult callback addwords(hwnd hdlg, uint message, wparam wparam, lparam lparam)switch (message)case wm_initdialog:richoice = ricurrentchoice;lichoice = licurrentchoice;ifcontinue = 0;rcon = 0; lcon = 0;checkradiobutton (hdlg, idc_radior0, idc_radiord, richoice) ;checkradiobutton (hdlg, idc_radiol0, idc_radiold, lichoice) ;setfocus (getdlgitem (hdlg, richoice) ;return false ;case wm_command:switch (loword (wparam) case idok:ricurrentchoice = richoice;licurrentchoice = lichoice;enddialog (hdlg, loword(wparam) ;return true;case idcancel:enddialog(hdlg, loword(wparam);return true;case idc_radior0:case idc_radiora:case idc_radiorb:case idc_radiorc:case idc_radiord:ifcontinue = 0;richoice = loword (wparam) ;checkradiobutton (hdlg, idc_radior0, idc_radiord, loword (wparam) ;changetheblock (richoice, lichoice) ;return true ;case idc_radiol0:case idc_radiola:case idc_radiolb:case idc_radiolc:case idc_radiold:ifcontinue = 0;lichoice = loword (wparam) ;checkradiobutton (hdlg, idc_radiol0, idc_radiold, loword (wparam) ;changetheblock (richoice, lichoice) ;return true ;break;case wm_paint: changetheblock (richoice, lichoice) ; renderscene() ; break ; return false;以下是一些舞蹈的关键动作与原视频的截图(如图): 图3-8 图3-9 图3-10图3-11 图3-12图3-13 图3-14图3-15以上是舞蹈变换关键动作的例图,为了更好的控制舞蹈动作,特别设计了一个虚拟舞蹈动作数据库,存于专门的数组中。由于本设计中的舞蹈动作繁多,一一列出略显繁杂,故而仅列出右手控制的数据,简单介绍一下本设计的虚拟数据库表的设计思想。如下表3-1:单位:度精确到:0.1f图3-8图3-9图3-10图3-11图3-12图3-13图3-14图3-15 1 x轴上臂旋转180000000180 2 y轴上臂旋转-900000000 3 x轴前臂旋转9016516416516516515020 4 y轴前臂旋转90003.5009090 5 x轴上臂移动0003.50400 6 x轴前臂移动00000200 7 大拇指2号旋转0070700000 8 大拇指3号旋转0090900000 9 食指1号旋转0000000010 食指2号旋转009090000011 食指3号旋转009090000012 食指4号旋转0000000013 中指1号旋转0000000014 中指2号旋转009090000015 中指3号旋转009090000016 中指4号旋转0000000017 无名指1号旋转0000000018 无名指2号旋转009090000019 无名指3号旋转009090000020 无名指4号旋转0000000021 小拇指1号旋转0000000022 小拇指2号旋转009090000023 小拇指3号旋转009090000024 小拇指4号旋转0000000025 x轴身体旋转00015000026 x轴身体移动00-13.5040027 z轴右大腿旋转00050-100028 x轴右大腿移动00-12040029 z轴右小腿旋转0005000030 x轴右小腿移动00-12050031 y轴右大腿旋转0000020032 x轴前臂旋转000000-35-9033 x轴手腕旋转000000-45034 z轴上臂旋转00-100004535 x轴右脚旋转0000050041 x轴上臂旋y轴上臂移动00-30000044 z轴身体旋转00-0.70000045 x轴大腿旋转00000-400046 y轴小腿移动00000-20047 z轴小腿,脚移动0000000048 z轴大腿移动0000000049 y轴手腕旋转0000000050 y轴脚移动00000-2003.8 过渡函数的设计在本设计中为了使关键手势之间更好的过渡,而设计了过渡函数。以右手的过渡函数为例。void rotation:rmiddle(glfloat array)/中间过渡函数for(int i = 0; i = 0.0f & rfreeni 0.1f | rfreeni -0.1f)rmemberanglei = arrayi;if(ifcontinue = 1)rcontinuous = 1 ;rmemberanglei += rfreeni / 160.0f ;在这个函数中array数组是新的关键舞蹈动作数组中的数据,minsize是经过宏定义的列坐标的总数,即各个关节需要控制的总数。rmemberangle数组是用于记录上一次变换后的数组,rfreen数组负责记录新数据和记忆数据之差,然后用这个差数据去除以一个特定的阈值,在我的设计中,我定义该阈值为160.0f,该阈值的大小决定了舞蹈关键动作之间过渡的速度,阈值越小速度越快,反之则越大。在过渡函数被调用的过程中,判断新数组和记忆数组的差值是否已经足够小,如果足够小,则直接将新数组中的数据赋值给记忆数组,以免产生无限循环的状况。三维虚拟人舞蹈动作的平滑度直接影响到舞蹈运动的可懂性。虚拟人舞蹈动作的特殊性在于它是有一些关键动作合成的动画序列,相邻的两个舞蹈动作之间存在着很大的动作差异,如果不进行平滑处理,将导致舞蹈动作在相邻关键动作的衔接处产生大幅度变化,这样将产生跳帧现象,给人不舒服的感觉。加入设计的过渡函数后,动作平缓过渡,动作衔接流畅,比较符合真实状态下人的舞蹈过程。3.9 灯光效果的设计在本程序中为了尽可能的使最终效果接近于动画或影视作品的效果,添加的灯光的效果。在本例中,自上而下添加了一个类似聚光灯的效果。下面对光照效果的处理做一下简单的介绍。3.9.1 关于光照效果当光照射到一个物体表面上时,会出现三种情形。首先,光可以通过物体表面向空间反射,产生反射光。其次,对于透明体,光可以穿透该物体并从另一端射出,产生透射光。最后,部分光将被物体表面吸收而转换成热。在上述三部分光中,仅仅是透射光和反射光能够进入人眼产生视觉效果。由于真实感图形是通过景物表面的颜色和明暗色调来表现景物的几何形状、空间位置以及表面材料的,而一个物体表面所呈现的颜色是由表面向视线方向辐射的光能决定的。在计算机图形学中,常采用一个既能表示光能大小又能表示其颜色组成的物理量即光亮度(luminance)或光强(intensity of light)来描述物体表面朝某方向辐射光能的颜色。采用这个物理量可以正确描述光在物体表面的反射、透射和吸收现象,因而可以正确计算处物体表面在空间给定方向上的光能颜色。物体表面向空间给定方向辐射的光强可应用光照模型进行计算。简单的光照模型通常假定物体表面是光滑的且由理想材料构成,因此只考虑光源照射在物体表面产生的反射光,所生成的图形可以模拟处不透明物体表面的明暗过渡,具有一定的真实感效果。复杂的光照模型除了考虑上述因素外,还要考虑周围环境的光对物体表面的影响。如光亮平滑的物体表面会将环境中其它物体映像在表面上,而通过透明物体也可看到其后的环境景象。这类光照模型称为整体光照模型,它能模拟出镜面映像、透明等较精致的光照效果。为了更真实的绘制图形,还要考虑物体表面的细节纹理,这通常使用一种称为“纹理映射”(texture mapping)的技术把已有的平面花纹图案映射到物体表面上,并在应用光照模型时将这些花纹的颜色考虑进去,物体表面细节的模拟使绘制的图形更接近自然景物。在opengl简单光照模型中的几种光分为:辐射光(emitted light)、环境光(ambient light)、漫射光(diffuse light)、镜面光(specular light)。辐射光是最简单的一种光,它直接从物体发出并且不受任何光源影响。环境光是由光源发出经环境多次散射而无法确定其方向的光,即似乎来自所有方向。一般说来,房间里的环境光成分

温馨提示

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

评论

0/150

提交评论