《数字图像处理计算机图形学基本实践.ppt》由会员分享,可在线阅读,更多相关《数字图像处理计算机图形学基本实践.ppt(36页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、数字图像处理计算机图形学基本实践现在学习的是第1页,共36页n本章以立方体上贴图像及3D动画显示和棋盘上放置透明球的阴影和透明效果为设计题目,对图像图形学中的显示物体的特点,对于阴影和折射等效果采用光线跟踪法,光照模型采用光线跟踪算法中常用的Torrance-Sparrow光照模型进行说明和应用。同时作为计算机图形学课程的学习,通过完成主要实践性研究小课题,达到最终要掌握计算机图形学的国内外动态,掌握计算机图形学的基本理论和技术和掌握计算机图形学中基本软件的设计、三维物体的造型和生成方法等基本技术。也可以了解图形数据库的基本理论和方法,具备从事计算机图形研究的能力。计算机图形生成在许多领域都得
2、到了广泛应用,在三维动画中计算机已成为主要工作的完成者现在学习的是第2页,共36页立方体上贴图片及3D动画显示n三维动画主要有三个核心技术:物体建模,即描述和构成三维物体。运动控制。在动画中物体模型会发生平移、旋转或形状改变。除了物体的运动外,摄像机本身也可以运动,进行推移、变焦、镜头的旋转等等。在计算机三维动画中并不存在真实的摄像机,所有摄像机的效果、取景、位置运动以及聚焦点等等,都是依靠编程来实现的。画面真实性处理。这是产生三维逼真图像的处理过程,通过消除不可见面,加入明暗阴影、透明、纹理等技术处理来模拟真实的三维物体。现在学习的是第3页,共36页原理、设计和算法n对于三维图形,需解决如下
3、几个问题:n如何将三维物体(图形)在二维的显示设备上显示出来;n如何用空间多边形、曲面来表示三维空间的物体;n如何解决三维空间物体的消隐问题;n如何产生逼真的、颜色分布自然的图形。现在学习的是第4页,共36页立方体建模,视立方体建模,视-屏坐标系建模屏坐标系建模n首先,由于立方体所在的本体坐标系和投影用的视坐标系均存在平移和旋转,为描述这种坐标系的平移和旋转,建立了CAxes类。该类存储某坐标系(左旋或右旋)原点在世界坐标系中的位置及该坐标系的坐标轴方向在世界坐标系中的方向向量,可对该坐标系相对于世界坐标系的平移和旋转进行描述(众坐标系中,唯有世界坐标系是固定不变的,故将其作为位置、方向计算的
4、参照对象)。现在学习的是第5页,共36页n立方体模型在本体坐标系中建立,可用顶点表、边表或面表模型来表示给定的立方体。边表和面表都是以顶点表为基础生成,所以可单纯用顶点表表示立方体,形成立方体模型最精简的存储结构。因为立方体的显示以面为单位进行(本系统在绘制立方体时只画可见面而未对可见边进行绘制,依靠立方体表面的图案纹理来自然地显示立方体),除了顶点表之外,在模型中增加了面表。面表项由指向该面四个顶点的指针和描述该面图案纹理的对象组成。设面的正法向是垂直于该面且由立方体内指向立方体外的方向,四个顶点与正法向呈右旋的关系存储,这样可简化面消隐判断及面参数坐标系的建立。现在学习的是第6页,共36页
5、n设立方体的棱与本体坐标系坐标轴平行,厚度、宽度和高度分别为Depth、Width和Height,中心点位于本体坐标系原点,则由图7-1所示,八个顶点在本体坐标系中的坐标分别为:(Depth/2,Width/2,Height/2)、(-Depth/2,Width/2,Height/2)、(-Depth/2,-Width/2,Height/2)、(Depth/2,-Width/2,Height/2)、(-Depth/2,-Width/2,-Height/2)、(-Depth/2,Width/2,-Height/2)、(Depth/2,Width/2,-Height/2)、(Depth/2,-Wi
6、dth/2,-Height/2)。在立方体模型中用CAxes类型变量来对立方体所在的本体坐标系的平移和旋转进行描述。现在学习的是第7页,共36页n设立方体的棱与本体坐标系坐标轴平行,厚度、宽度和高度分别为Depth、Width和Height,中心点位于本体坐标系原点,则由图7-1所示,八个顶点在本体坐标系中的坐标分别为:(Depth/2,Width/2,Height/2)、(-Depth/2,Width/2,Height/2)、(-Depth/2,-Width/2,Height/2)、(Depth/2,-Width/2,Height/2)、(-Depth/2,-Width/2,-Height/
7、2)、(-Depth/2,Width/2,-Height/2)、(Depth/2,Width/2,-Height/2)、(Depth/2,-Width/2,-Height/2)。在立方体模型中用CAxes类型变量来对立方体所在的本体坐标系的平移和旋转进行描述。现在学习的是第8页,共36页n由于视坐标系和屏坐标系相互间空间位置固定,可仅对视坐标系的位置和方向进行描述,并通过视-屏坐标系之间的位置关系来描述屏坐标系。这些位置关系包括:屏平面到视点的距离VD、最近可见点及最远可见点到视点的距离FD和BD、屏平面中点位置(wcu,wcv),屏平面的半边长WSU和WSV。现在学习的是第9页,共36页n由
8、于视坐标系和屏坐标系相互间空间位置固定,可仅对视坐标系的位置和方向进行描述,并通过视-屏坐标系之间的位置关系来描述屏坐标系。这些位置关系包括:屏平面到视点的距离VD、最近可见点及最远可见点到视点的距离FD和BD、屏平面中点位置(wcu,wcv),屏平面的半边长WSU和WSV。立方体在本体坐标系中建模现在学习的是第10页,共36页立方体的立方体的3D显示显示n立方体的3D显示流程图如框图1所示。立方体最初定义于自己的局部坐标系(本体坐标系)中,经模型变换,以一定的形状、尺寸存在于世界坐标系的某个位置,再经过观察变换,生成物体在视坐标系中的表示。视见体在视坐标系中经过消隐处理,将剩下的部分投影到屏
9、平面上,再由窗口(屏平面)至视区的变换将其变换到设备坐标系中显示。现在学习的是第11页,共36页模型变换模型变换现在学习的是第12页,共36页观察变换观察变换现在学习的是第13页,共36页消隐处理消隐处理现在学习的是第14页,共36页现在学习的是第15页,共36页投影变换投影变换现在学习的是第16页,共36页表面图案纹理的粘贴及光照效果的添加表面图案纹理的粘贴及光照效果的添加n为了给立方体表面粘贴图案纹理及添加光照效果,必须对投影四边形进行扫描,并且通过纹理映射和光照模型计算求出当前扫描点处的光亮度值进行逐点填充。由于本系统的投影四边形为凸四边形,在进行投影区域扫描时使用了简化的扫描线填充算法
10、。由于篇幅有限,在这里不作详述,以下着重阐述与纹理映射及光照强度计算有关的问题。现在学习的是第17页,共36页纹理映射纹理映射现在学习的是第18页,共36页纹理映射纹理映射现在学习的是第19页,共36页纹理映射纹理映射现在学习的是第20页,共36页纹理映射纹理映射现在学习的是第21页,共36页添加光照效果添加光照效果现在学习的是第22页,共36页添加光照效果添加光照效果现在学习的是第23页,共36页实验过程n本系统图形生成内核部分用标准C+编成,并用该内核和VisualC+6.0编程环境开发出可在Windows98下运行的演示程序。图形生成内核部分由四个结构和五个C+类组成。现在学习的是第24
11、页,共36页n结构POINT3D、POINT2D和VECTOR3D:定义三维、二维坐标点及三维向量,其具体程序定义为:ntypedefstructnfloatx,y,z;nPOINT3D;ntypedefstructn floatx,y;nPOINT2D;ntypedefPOINT3DVECTOR3D;现在学习的是第25页,共36页n(2)CAxes类:该类定义某坐标系在世界坐标系中的平移、旋转并定义了与坐标系有关的操作。主要的成员变量有:nPOINT3Dcenter坐标系在世界坐标系中的平移;nVECTOR3Dxn,yn,zn坐标系三基轴在世界坐标系中的单位方向向量。n主要的成员函数有:nv
12、oidmove(VECTOR3Ddistance)在世界坐标系中平移坐标系;nvoidrevolve_x_axes(floatangle)将坐标系绕基轴x旋转angle角;nvoidrevolve_y_axes(floatangle)将坐标系绕基轴y旋转angle角;nvoidrevolve_z_axes(floatangle)将坐标系绕基轴z旋转angle角。nCAxes可对左旋及右旋坐标系进行描述(两种坐标系在坐标轴方向和坐标系旋转方面有所差别)。现在学习的是第26页,共36页n(3)CVCS类:该类由类Caxes继承而来,是对视-屏坐标系的定义。经过精心设计,封装了描述视-屏坐标系必需的
13、变量和函数。基类Caxes已能完整地描述视-屏坐标系在世界坐标系中的平移和旋转,新增加的成员变量主要用于定义屏平面的尺寸及屏平面在视坐标系中的位置,有:nfloatVD屏平面与视点之距;nfloatFD,BD视坐标中可见点的z的最小值和最大值;nfloatWSU,WSV屏平面的半宽和半高;nfloatwcu,wcv屏平面中点在视坐标系中的位置。现在学习的是第27页,共36页n增加的成员函数有:nvoidWCS_to_VCS(POINT3Dpw,POINT3D&pv)求世界坐标系中的点在视坐标系中的映射坐标;nvoidVCS_to_SCS(POINT3D&pv,POINT2D&ps)求视坐标系中
14、的点在屏坐标系中的投影坐标;nvoiddraw_point(intx,inty,COLORREFcolor)在屏平面指定位置画点(对坐标值根据屏平面尺寸裁剪)。ndraw_point实际是通过调用与设备相关的一个外部画点函数实现,该外部函数的地址由CVCS中的一个函数指针void(*draw_point_func_ptr)(intx,inty,COLORREFcolor)存储。这样能够使CVCS中的内容与设备无关,对不同的平台只要定义不同的外部画点函数即可实现移植。实际上该外部画点函数实现了屏平面向设备坐标系的映射。现在学习的是第28页,共36页nCTexture类:该类封装了对表面图案纹理的
15、描述,定义了存储表面性质的数组变量和图案位图装载、纹理映射等函数。主要的成员变量有:nunsignedcharbitmap512512图案位图存储数组,用来存储256256彩色位图和MipMap反走样算法所用的低分辨率位图的三基色分量;nCOLORREF specular_reflection_rate 表面的镜面反射率;nfloatspecular_reflect_n表面的会聚指数。现在学习的是第29页,共36页n主要的成员函数有:nintbuild_bitmap_from_res_id(unsignedintres_id)从应用程序的资源表中读入位图的三基色分量并整理成MipMap算法所需
16、的位图存储格式;nCOLORREFMipMap(floatu,floatv,floatd)由纹理空间参数坐标u、v及屏平面像素在纹理空间中的等效边长d用MipMap反走样算法求纹理值;nvirtualCOLORREFget_texture(floatu,floatv,floatd)供外部调用的求纹理值的函数。现在学习的是第30页,共36页n结构FACE与Ccube类:结构FACE定义了三维四边形表面,内容包括对四边形顶点的定义及对表面纹理的定义,具体声明为:ntypedefstructnPOINT3D*vertex_ptr4;nCTexturetexture;nFACE;n类Cccube用于定
17、义本系统的主要描述对象空间立方体,它完整地封装了空间立方体的性质及坐标映射、表面绘制、立方体绘制等函数。主要成员变量有:nCAxesaxes描述立方体本体坐标系;nPOINT3Dvertex8立方体顶点坐标数组;nFACEface6立方体表面数组。现在学习的是第31页,共36页n主要的成员函数有:nvoidbuild_cube(floatdepth,floatwidth,floatheight)由给定的厚度、宽度、高度创建立方体;nvoidget_s_to_uv_coef(POINT2Dps4)由投影四边形的顶点坐标计算由屏坐标系向纹理坐标空间映射的映射系数;nints_to_uvd(POIN
18、T2D&ps,float&u,float&v,float&d)求屏坐标到纹理空间的映射坐标;nintvertex_face_visual(POINT3Dvertex4,CVCS*vcs)判断由世界坐标点表示的空间四边形在给定视坐标系中的可见性;nvoiddraw_face(FACE*face,CLight*light,CVCS*vcs)在指定的屏平面上以给定的光照模型绘制表面;nvoiddraw(CLight*light,CVCS*vcs)在指定的屏平面上以给定的光照模型绘制三维立方体;nvoidOCS_to_WCS(POINT3D&po,POINT3D&pw)求本体坐标系中的点在世界坐标系的
19、映射坐标。现在学习的是第32页,共36页n(6)结构LIGHT与类CLight:结构LIGHT定义了点光源的空间位置和亮度:ntypedefstructnPOINT3Dlocation;nCOLORREFilluminance;nLIGHT;n类Clight定义了点光源数组、点光源增删函数及光亮度计算函数。主要成员变量有:nCOLORREFIa环境光亮度;nLIGHT*light_array16点光源指针数组;nintlight_cnt点光源数目。现在学习的是第33页,共36页n主要成员函数有:nintadd_light(POINT3D&location,COLORREFilluminance
20、)增加点光源;nintdel_light(intlight_id)删除点光源;nvoiddraw_light(CVCS*vcs)在给定的屏平面上根据光源位置与亮度绘制点光源;nCOLORREFget_illuminance(POINT3D&v,POINT3D&p,VECTOR3D&norm_n,COLORREFdiff_reflect_rate,COLORREFspec_reflect_rate,floatspec_reflect_n)根据空间点位置、空间点所在表面在该点处外法向、视点位置、表面反射系数等参数计算该点的光亮度值。现在学习的是第34页,共36页本设计和特点n本系统结构经过精心设计
21、,将各对象及功能模块作了良好封装,整个系统功能扩充非常容易。比如,通过对视-屏坐标系的封装,使双视点(左眼、右眼)甚至多视点模型的生成变得很简单,本系统的演示程序就提供了单/双视点模型选项供用户选择。又如,将Ctexture中的纹理获取函数get_texture声明为virtual类型,可以通过重载该函数构造不同的纹理模型(如麻布纹理等)。现在学习的是第35页,共36页结果和讨论n基于本系统的结构开发了一个粘贴有图案纹理的3D立方体动画显示程序。程序通过多线程技术实现立方体的不断旋转与视区显示刷新,并可通过键盘实现视点漫游。、健分别表示将视线方向绕视点左转、右转、上转、下转;按Home和End键分别使视点前移或后移;按PageUp和PageDown键分别使视-屏坐标系焦距增大与缩小。程序提供了单/双视点图形生成模型两种工作方式。在单视点模型下,观察者所在点为视坐标系原点;在双视点模型下,观察者所在点为左右视坐标系原点连线的中心点。现在学习的是第36页,共36页