资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,第八章 计算机动画技术,2024/11/26,1,计算机图形学的一个重要应用领域就是计算机动画。现代的计算机技术与传统动画技术相结合,产生出计算机动画技术,得到了快速发展,在影视、娱乐、仿真等领域得到广泛的应用。,本章主要分两部分,第一部分首先介绍计算机动画技术,包括计算机动画技术概述、动画技术分类、动画的基本原理和关键技术,第二部分则以几个连贯的例子,重点介绍使用,OpenGL,产生动画的一般方法。,2024/11/26,2,8.1,计算机动画技术概述,2024/11/26,3,8.1.1,动画技术的历史和发展,法国考古学家发现,两万五千年前的石器时代洞穴画上就有系列的野牛奔跑分析图,这是人类试图用笔,(,或石块,),捕捉并凝结动作的最初尝试。,欧洲修道士发明了“魔术幻灯”,中国唐朝发明的皮影戏。,近代世界随着电影的出现,表明人们对于动画播放的技术已基本掌握,平面动画的制作技术也逐渐成熟,特别是与计算机技术相结合,计算机动画技术特别是三维动画技术获得极大的发展。,计算机动画技术是在传统动画的基础上,随着现代计算机技术,特别是图形学、多媒体的发展而逐步发展、成熟起来。,计算机动画狭义的定义是指用计算机技术辅助制作影视动画片,或以输出实时交互场景为主的技术。,2024/11/26,4,8.1.1,动画技术的历史和发展,发展过程三个阶段,1,、,60,年代美国的,Bell,实验室和一些研究机构就开始研究用计算机实现动画片中间画面的制作和自动上色。这些早期的计算机动画系统基本上是二维辅助动画系统(,Computer Assisted Animation,),也称为二维动画。,1963,年美国贝尔实验室语言编写了一个称为,BEFLIX,的二维动画制作系统,这个软件系统在计算机辅助制作动画的发展历程上具有里程碑的意义。,2024/11/26,5,8.1.1,动画技术的历史和发展,2,、第二个阶段是从,20,世纪,70,80,年代中期,计算机图形、图像技术的软、硬件都取得了显著的发展,使计算机动画技术日趋成熟,三维辅助动画系统也开始研制并投入使用。三维动画也称为计算机生成动画(,Computer Generated Animation,),其动画的对象不是简单地由外部输入,而是根据三维数据在计算机内部生成的。,2024/11/26,6,8.1.1,动画技术的历史和发展,3,、第三个阶段是从,1985,年到目前为止的飞速发展时期,是计算机辅助制作三维动画的实用化和向更高层次发展的阶段。在这个阶段中,首先是出现世界上第一个完整的且具有实用意义的三维动画片。在随后的十年内,计算机辅助三维动画的制作技术有了质的变化,已经综合集成了现代数学、控制论、图形图像学、人工智能、计算机软件和艺术的最新成果。,2024/11/26,7,8.1.2,计算机动画的应用,目前计算机动画已经发展成一个多种学科和技术的综合领域,以计算机图形学,特别是实体造型和真实感显示技术(消隐、光照模型、表面质感等)为基础,涉及到图像处理技术、运动控制原理、视频技术、艺术甚至于视觉心理学、生物学、机器人学、人工智能等领域,它以其自身的特点而逐渐成为一门独立的学科。,2024/11/26,8,计算机动画的应用领域非常宽广。例如,这些领域包括:动画片制作,广告、电影特技、电子游戏、家用娱乐、教学演示,训练模拟,作战演习、产品模拟试验等。甚至可以说,凡是需要显示图像的地方,都或多或少可以使用一些动画。,2024/11/26,9,8.1.3,常用动画软件,1,、,3D MAX,2024/11/26,10,8.1.3,常用动画软件,2,、,Maya,2024/11/26,11,8.1.3,常用动画软件,3,、,Flash,2024/11/26,12,8.2,计算机动画的分类与原理,2024/11/26,13,8.2.1,计算机动画的分类,计算机动画可以分为二维动画与三维动画,也就是通常所说的平面动画和,3D,动画。,根据运动的控制方式的不同,计算机动画又可以分为实时动画和逐帧动画。,2024/11/26,14,8.2.2,计算机动画的基本原理,计算机动画的基本原理是利用人眼的视觉暂留。把一些连续的图片快速顺序播放,人就会把他们看成是连续的动作。每一幅图片就被称为一个帧。,2024/11/26,15,8.2.2,计算机动画的基本原理,计算机产生动画,实质上也就是产生出一个个的帧,.,实时(,real-time,)动画,:,实时动画是用算法来实现物体的运动。,逐帧动画(,frame-by-frame,);,2024/11/26,16,8.2.3,关键帧技术,关帧技术实际上也是从传统动画片生产过程受启发而产生。对一部动画而言,大部分的帧是连贯的、逐渐变化的,从最初的帧进行到最后的帧。,绘制重要的帧。传统动画制作者就使用了这种方法提高生产率。主创人员绘制重要的帧,而让助手绘制那些重要的帧之间的帧。这些重要的帧称为关键帧,而关键帧之间的帧称为中间帧。,2024/11/26,17,8.2.3,关键帧技术,其中1、2、3是关键帧,而中间的是中间帧。,其中1、2、3是关键帧,而中间的是中间帧。,其中,1,、,2,、,3,是关键帧,而中间的是中间帧。,采用关键帧技术,中间帧的生成就由计算机来完成,动画制作者首先绘制关键的重要画面,让计算机使用关键帧的算法来自动生成中间各帧。计算机代替了传统动画中绘制中间帧的动画师。,2024/11/26,18,最常用的关键帧算法就是插值算法。所有影响画面图像的参数都可成为关键帧的参数,如位置、旋转角、纹理的参数等。例如通过对运动参数插值,就可以实现对动画的运动控制,如物体的位置、方向、颜色等的变化,当然也可以对多个运动参数进行组合插值。,一般的插值算法有两种方式:线性插值和非线性插值。线形插值实现平稳的过渡效果,非线性插值则可以实现某种特殊的加速度效果。,2024/11/26,19,从原理上讲,关键帧插值问题可归结为参数插值问题,传统的插值方法都可应用到关键帧方法中。但关键帧插值又与纯数学的插值不同,有其特殊性。一个好的关键帧插值方法必须能够产生逼真的运动效果并能给用户提供方便有效的控制手段。一个特定的运动从空间轨迹来看可能是正确的,但从运动学或动画设计来看可能是错误的或者不合适的。用户必须能够控制运动的运动学特性,即通过调整插值函数来改变运动的速度和加速度。,2024/11/26,20,8.2.4,运动描述,在实时动画中,如何表示运动?就是运动描述。,一种最简单的运动形式是对象的移动,它是指屏幕上一个局部图像或对象在二维平面上沿着某一固定轨迹作步进运动。,2024/11/26,21,基于图像的,Morph(,变形,),是一种常用的二维动画技术。,2024/11/26,22,8.2.5,动画文件格式,1,、,GIF,格式:,GIF,是图形交换格式,(Graphics Interchange Format),2,、,Flic,格式:,Flic,文件是,Autodesk,公司在其出品的,Autodesk Animator/Animator Pro/3D Studio,等,2D/3D,动画制作软件中采用的彩色动画文件格式,3,、,AVI,格式:,Audio Video Interleaved,,即音频视频交错格式。,4,、,DivX,格式:这是由,MPEG,4,衍生出的一种视频编码,(,压缩,),标准,5,、其他有,:RM,格式,;MOV,格式,;SWF,格式,2024/11/26,23,8.3,计算机动画的生成方法,2024/11/26,24,8.3.1 OpenGL,动画设计概述,OpenGL,为动画设计提供了很好的支持,一些很著名的,3D,游戏软件都使用,OpenGL,作为渲染引擎,。,OpenGL,提供了一些函数,支持图像和场景的移动和旋转等操作,并支持图像的快速切换输出。采用动画技术与前面所学的图形学基本知识相互配合,可以使用户很轻易地创建出动画效果出来。,2024/11/26,25,8.3.2,反弹的方块,程序首先在窗体中绘制一个正方形,让它在窗口中移动。当正方体碰到窗口的边界就会反弹,沿着另一个方向继续移动。,2024/11/26,26,使用,glutDisplayFunc(RenderHandler),负责绘制一个正方形。,正方形移动,要设法在调用,RenderHandler,之前持续改变正方形的坐标。在程序中创建一个循环完成这个功能,每隔一段时间就改变一下正方形的坐标,这样看起来正方形就不断移动了。,2024/11/26,27,GLUT,函数库中允许注册一个回调函数,glutTimerFunc,,它允许用户方便地设置简单的动画序列。这个函数的参数包括需要调用的函数名和调用前等待时间。,glutTimerFunc(unsigned int millis,void(GLUTCALLBACK*func)(int value),int value);,2024/11/26,28,碰撞检测:,/,碰到窗口左边或者右边要更改方向,if(x windowWidth-rectSize|x windowHeight|y 360.0),spin=spin-360.0;,glutPostRedisplay();,glutTimerFunc(5,TimerFunction,1);,2024/11/26,32,8.3.3,双缓冲技术,2024/11/26,33,8.3.4,旋转的立体圆环,三维空间的运动就比较麻烦,利用已经掌握了使用矩阵运算的办法表达物体的几何变换,实现一个旋转的立体圆环,2024/11/26,34,8.3.4,旋转的立体圆环,自定义的变换矩阵函数,void mkRotationMatrix(float angle,float x,float y,float z,GLMatrix mMatrix),这个函数负责创建一个产生旋转变换的,4x4,矩阵。,2024/11/26,35,8.3.4,旋转的立体圆环,void RenderHandler(void),GLMatrix transformationMatrix;/,存储变换矩阵,static GLfloat yRot=0.0f;,yRot+=0.5f;/,每次旋转角度增量,glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);,mkRotationMatrix(DegToRad(yRot),1.0f,1.0f,0.0f,transformationMatrix);/,创建一个旋转矩阵,transformationMatrix12=0.0f;/,加上平移分量,transformationMatrix13=0.0f;,transformationMatrix14=-2.0f;,glLoadMatrixf(transformationMatrix);,glutWireTorus(0.15f,0.35f,60,60);,glutSwapBuffers();/,双缓冲交换,2024/11/26,36,2024/11/26,37,
展开阅读全文