《第8章计算机动画技术.ppt》由会员分享,可在线阅读,更多相关《第8章计算机动画技术.ppt(24页珍藏版)》请在三一办公上搜索。
1、第八章 计算机动画技术,计算机图形学的一个重要应用领域就是计算机动画。现代的计算机技术与传统动画技术相结合,产生出计算机动画技术,得到了快速发展,在影视、娱乐、仿真等领域得到广泛的应用。本章主要分两部分:第一部分首先介绍计算机动画技术,包括计算机动画技术概述、动画技术分类、动画的基本原理和关键技术,第二部分则以几个连贯的例子,重点介绍使用OpenGL产生动画的一般方法。,8.1 计算机动画技术概述,动画的起源岩壁动画皮影戏传统动画技术电影动画片计算机动画技术是在传统动画的基础上,随着现代计算机技术,特别是图形学、多媒体的发展而逐步发展、成熟起来。计算机动画狭义的定义是指用计算机技术辅助制作影视
2、动画片,或以输出实时交互场景为主的技术。,8.1.1 动画技术的历史和发展,动画技术的历史和发展,计算机动画技术发展的三阶段60年代,1963年美国贝尔实验室语言编写了一个称为BEFLIX的二维动画制作系统,该系统在计算机辅助制作动画的发展历程上具有里程碑的意义。7080年代中期,计算机图形技术取得显著发展,计算机动画技术日趋成熟,三维辅助动画系统投入使用 80年代至今,飞速发展时期,是计算机辅助制作三维动画的实用化和向更高层次发展的阶段,计算机动画的应用,应用范围越来越宽广越来越深入电影制作 电子游戏 用户界面 训练模拟 产品试验等,目前计算机动画已经发展成一个多种学科和技术的综合领域,以计
3、算机图形学,特别是实体造型和真实感显示技术为基础,涉及到图像处理技术、运动控制原理、视频技术、艺术甚至于视觉心理学、生物学、机器人学、人工智能等领域,它以其自身的特点而逐渐成为一门独立的学科。,常用动画软件,Maya,Flash,3D MAX,8.2 计算机动画的分类与原理,计算机动画的分类 根据视觉空间的不同 二维动画 三维动画根据运动的控制方式的不同实时动画 逐帧动画,一般而言,二维动画大多采用逐帧动画技术,而三维动画大多采用实时动画技术,计算机动画的基本原理,动画的基本原理是利用人眼的视觉暂留计算机产生动画,实质上也就是产生出一个个连续的帧 每一幅图片就被称为一个帧。,关键帧技术,实时动
4、画(real-time):用算法来实现物体的运动 逐帧动画(frame-by-frame)逐帧动画的难题:动画片制作中,最大的困难是制作者需要制作大量的帧 关键帧与中间帧,关键帧的插值算法,所有影响画面图像的参数都可成为关键帧的参数,如位置、旋转角、纹理的参数等。例如通过对运动参数插值,就可以实现对动画的运动控制,如物体的位置、方向、颜色等的变化,也可以对多个运动参数进行组合插值。一般的插值算法有两种方式:线形插值实现平稳的过渡效果非线性插值则可以实现某种特殊的加速度效果,运动描述,在实时动画中,计算机对输入的数据进行快速处理,并在人眼察觉不到的时间内将结果随时显示出来在实时动画中,如何表示运
5、动呢?这就是运动描述。更复杂的运动一般要通过路径进行描述,这种动画称之为路径动画。,变形技术,基于图像的Morph(变形)是一种常用的二维动画技术,基于特征的图象变形(猫变虎),动画文件格式,动画数据需要保存在动画文件中,必须有一定的文件格式。格式要符合通用标准:1、GIF格式:GIF是图形交换格式(Graphics Interchange Format)2、Flic格式:Flic文件是Autodesk公司在其出品的Autodesk Animator/Animator Pro/3D Studio等2D/3D动画制作软件中采用的彩色动画文件格式3、AVI格式:Audio Video Interl
6、eaved,即音频视频交错格式 4、DivX格式:这是由MPEG4衍生出的一种视频编码(压缩)标准 5、RM格式;MOV格式;SWF格式,8.3 计算机动画的生成方法,OpenGL动画设计概述 OpenGL为动画设计提供了很好的支持,一些很著名的3D游戏软件都使用OpenGL作为渲染引擎 OpenGL提供了一些函数,支持图像和场景的移动和旋转等操作,并支持图像的快速切换输出。采用动画技术与前面所学的图形学基本知识相互配合,可以使用户很轻易地创建出动画效果,反弹的方块,程序首先在窗体中绘制一个正方形,让它在窗口中移动。当正方体碰到窗口的边界就会反弹,沿着另一个方向继续移动,使用双缓冲技术的旋转方
7、块,单缓冲模式(GLUT_SINGLE):时间间隔改小,动画的效果变得很差 双缓冲技术(GLUT_DOUBLE):允许在屏幕之外的缓冲区执行绘图代码,然后使用交换命令把所绘制的图形立即显示在屏幕上,下面用另一个例子再介绍并演示双缓冲技术,产生一个绕中心旋转的正方形,将上一节程序中的glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);改为glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB);同时,在RenderHandler函数中,将glFlush()改为glutSwapBuffers(),就可以使用OpenGL的双缓冲功能,产生平滑
8、的动画效果。旋转使用了旋转变换:glRotatef(spin,0.0,0.0,1.0);/旋转变换,双缓冲技术,双缓冲技术有两个用途:首先,在绘制复杂图形的时候,图形合成的时间也许很长,可能不想让用户漫长等待。使用双缓冲技术,可以先合成一副图像,在完成以后再显示给用户,这样用户就看不到不完整的图像了。其次,在动画制作的时候也广泛使用双缓冲技术。每个动画帧首先在屏幕之外的缓冲区绘制,完成后快速交换显示在屏幕。这样就大大提高了动画的显示速度,动画的关键在于动,在实时动画中,为了能够恰当地描述物体的运动,必须有某种方法。二维运动的表达相对简单,但三维空间的运动就比较麻烦,可以通过使用矩阵运算的办法表
9、达物体的几何变换。,实现一个旋转的立体圆环,这个程序的重点是自定义的变换矩阵函数 void mkRotationMatrix(float angle,float x,float y,float z,GLMatrix mMatrix)该函数负责创建一个产生旋转变换的4x4矩阵,函数RenderHandler中使用创建的旋转变换阵,每次产生一个新的旋转变换阵,加上平移分量后,使绘制的线框圆环产生旋转的效果,交互式动画,在许多时候,要根据用户的反馈决定下一步动画的生成,这就是交互式动画用户通过操纵键盘、鼠标、游戏杆等输入设备,控制游戏主角下一步的走向和动作,游戏程序必须根据这些输入,决定下一步输出的
10、图像 本节仍然继续上节的例子,介绍如何根据用户的键盘信息绘制不同的场景,为了丰富画面,为上节的程序新加入两个小球,它们分别沿着自己的轨道运动。中间的圆环绕自身转动。,当用户按下上、下、左、右的光标键,就可以控制场景的移动,离近离远,或者左右旋转,具体实现方法,void SpecialKeys(int key,int x,int y)/根据键盘动作响应用户请求if(key=GLUT_KEY_UP)MoveFrameForward(0.1f);if(key=GLUT_KEY_DOWN)MoveFrameBack(0.1f);if(key=GLUT_KEY_LEFT)RotateFrameLeft(
11、0.3);if(key=GLUT_KEY_RIGHT)RotateFrameRight(0.3);glutPostRedisplay();/刷新窗口,通过读取键盘码,对应控制场景的移动和旋转:void MoveFrameForward(GLfloat fStep)/场景向前移动zMove+=fStep;void MoveFrameBack(GLfloat fStep)/场景向后移动zMove-=fStep;void RotateFrameRight(GLfloat fAngle)/场景向右旋转ySpin+=fAngle;void RotateFrameLeft(GLfloat fAngle)/场景向左旋转ySpin-=fAngle;,结束,计算机动画技术是一门迅速发展的技术,新技术新思路层出不穷,本章只介绍最基本的一些概念希望大家在实践中动手编程体会计算机动画的乐趣本章习题(见教材),