第八章计算机动画技术.ppt
第八章 计算机动画技术,计算机动画技术,计算机动画技术概述,计算机图形学的一个重要应用领域就是计算机动画。现代的计算机技术与传统动画技术相结合,产生出计算机动画技术,得到了快速发展,在影视、娱乐、仿真等领域得到广泛的应用。,计算机动画技术,动画技术的历史和发展,动画的起源岩壁动画皮影戏传统动画技术电影动画片计算机动画技术,计算机动画技术,计算机动画技术发展的三阶段60年代,美国的Bell实验室7080年代中期,计算机图形技术取得显著发展,计算机动画技术日趋成熟,三维辅助动画系统投入使用 80年代至今,飞速发展时期,是计算机辅助制作三维动画的实用化和向更高层次发展的阶段,计算机动画技术,计算机动画的应用,应用范围越来越宽广越来越深入电影制作 电子游戏 用户界面 训练模拟 产品试验等,计算机动画技术,常用动画软件,3D MAX,计算机动画技术,Maya,计算机动画技术,计算机动画的分类与原理,计算机动画的分类 根据视觉空间的不同 二维动画 三维动画根据运动的控制方式的不同实时动画 逐帧动画,计算机动画技术,一般而言,二维动画大多采用逐帧动画技术,而三维动画大多采用实时动画技术,计算机动画技术,计算机动画的基本原理*,动画的基本原理是利用人眼的视觉暂留计算机产生动画,实质上也就是产生出一个个连续的帧,计算机动画技术,关键帧技术,实时(real-time)动画和逐帧动画(frame-by-frame)逐帧动画的难题:动画片制作中,最大的困难是制作者需要制作大量的帧 关键帧与中间帧,计算机动画技术,计算机动画技术,关键帧的插值算法线形插值非线性插值,计算机动画技术,运动描述,在实时动画中,计算机对输入的数据进行快速处理,并在人眼察觉不到的时间内将结果随时显示出来在实时动画中,如何表示运动呢?这就是运动描述 更复杂的运动一般要通过路径进行描述,这种动画称之为路径动画,计算机动画技术,变形技术 基于图像的Morph(变形),计算机动画技术,动画文件格式,动画数据需要保存在动画文件中,必须有一定的文件格式 格式要符合通用标准GIF格式 Flic格式 AVI格式 SWF格式,计算机动画技术,计算机动画的生成方法,OpenGL动画设计概述 OpenGL为动画设计提供了很好的支持,一些很著名的3D游戏软件都使用OpenGL作为渲染引擎 OpenGL提供了一些函数,支持图像和场景的移动和旋转等操作,并支持图像的快速切换输出。采用动画技术与前面所学的图形学基本知识相互配合,可以使用户很轻易地创建出动画效果,计算机动画技术,反弹的方块,程序首先在窗体中绘制一个正方形,让它在窗口中移动。当正方体碰到窗口的边界就会反弹,沿着另一个方向继续移动,计算机动画技术,物体的运动碰撞检测是动画设计中经常遇到的,本例使用OpenGL的GLUT库函数实现一个物体的碰撞运动 使用RenderHandler绘制场景 主显示循环glutDisplayFunc 回调函数glutTimerFunc,计算机动画技术,碰撞检测主要由下面这两条语句构成:/碰到窗口左边或者右边要更改方向 if(x windowWidth-rectSize|x windowHeight|y-windowHeight+rectSize)ystep=-ystep;/实际的移动增量 x+=xstep;y+=ystep;,计算机动画技术,使用双缓冲技术的旋转方块,单缓冲模式(GLUT_SINGLE)时间间隔改小,动画的效果变得很差 双缓冲技术(GLUT_DOUBLE)允许在屏幕之外的缓冲区执行绘图代码,然后使用交换命令把所绘制的图形立即显示在屏幕上,计算机动画技术,下面用另一个例子再介绍并演示双缓冲技术,产生一个绕中心旋转的正方形,计算机动画技术,将上一节程序中的glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);改为glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB);同时,在RenderHandler函数中,将glFlush()改为glutSwapBuffers(),就可以使用OpenGL的双缓冲功能,产生平滑的动画效果。旋转使用了旋转变换:glRotatef(spin,0.0,0.0,1.0);/旋转变换,计算机动画技术,双缓冲技术有两个用途:首先,在绘制复杂图形的时候,图形合成的时间也许很长,可能不想让用户漫长等待。使用双缓冲技术,可以先合成一副图像,在完成以后再显示给用户,这样用户就看不到不完整的图像了。其次,在动画制作的时候也广泛使用双缓冲技术。每个动画帧首先在屏幕之外的缓冲区绘制,完成后快速交换显示在屏幕。这样就大大提高了动画的显示速度,计算机动画技术,旋转的立体圆环,动画的关键在于动,在实时动画中,为了能够恰当地描述物体的运动,必须有某种方法。二维运动的表达相对简单,但三维空间的运动就比较麻烦,幸好我们通过前面的图形学知识的学习,已经掌握了使用矩阵运算的办法表达物体的几何变换,下面就用这种方法实现一个旋转的立体圆环,计算机动画技术,计算机动画技术,这个程序的重点是自定义的变换矩阵函数void mkRotationMatrix(float angle,float x,float y,float z,GLMatrix mMatrix)这个函数负责创建一个产生旋转变换的4x4矩阵函数RenderHandler中使用创建的旋转变换阵,每次产生一个新的旋转变换阵,加上平移分量后,使绘制的线框圆环产生旋转的效果,计算机动画技术,交互式动画,在许多时候,要根据用户的反馈决定下一步动画的生成,这就是交互式动画用户通过操纵键盘、鼠标、游戏杆等输入设备,控制游戏主角下一步的走向和动作,游戏程序必须根据这些输入,决定下一步输出的图像 本节仍然继续上节的例子,介绍如何根据用户的键盘信息绘制不同的场景,计算机动画技术,计算机动画技术,为了丰富画面,为上节的程序新加入两个小球,它们分别沿着自己的轨道运动。中间的圆环绕自身转动。当用户按下上、下、左、右的光标键,就可以控制场景的移动,离近离远,或者左右旋转,计算机动画技术,具体实现方法是这样的: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(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;,计算机动画技术,结束,计算机动画技术是一门迅速发展的技术,新技术新思路层出不穷,本章只介绍最基本的一些概念希望大家在实践中动手编程体会计算机动画的乐趣本章习题(见教材)本次结束谢谢大家,