数字图像处理计算机图形学基本实践_第1页
数字图像处理计算机图形学基本实践_第2页
数字图像处理计算机图形学基本实践_第3页
数字图像处理计算机图形学基本实践_第4页
数字图像处理计算机图形学基本实践_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

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

文档简介

1、第七章 计算机图形学基本实践 n计算机图形学是随着计算机及其外围设备而产生和发展起来的。它是近代计算机科学与雷达,电视及图像处理技术的发展汇合而产生的硕果。在航空航天,汽车,电子,机械,土建工程,影视广告,地理信息,轻纺化工等领域中的广泛应用,并推动了这门学科的不断发展。不断解决应用中提出的各类新课题的同时,又进一步充实和丰富了这门学科的内容。 n本章以立方体上贴图像及3D动画显示和棋盘上放置透明球的阴影和透明效果为设计题目,对图像图形学中的显示物体的特点,对于阴影和折射等效果采用光线跟踪法,光照模型采用光线跟踪算法中常用的Torrance-Sparrow光照模型进行说明和应用。同时作为计算机

2、图形学课程的学习,通过完成主要实践性研究小课题,达到最终要掌握计算机图形学的国内外动态,掌握计算机图形学的基本理论和技术和掌握计算机图形学中基本软件的设计、三维物体的造型和生成方法等基本技术。也可以了解图形数据库的基本理论和方法,具备从事计算机图形研究的能力。计算机图形生成在许多领域都得到了广泛应用,在三维动画中计算机已成为主要工作的完成者 立方体上贴图片及3D动画显示 n三维动画主要有三个核心技术:物体建模,即描述和构成三维物体。运动控制。在动画中物体模型会发生平移、旋转或形状改变。除了物体的运动外,摄像机本身也可以运动,进行推移、变焦、镜头的旋转等等。在计算机三维动画中并不存在真实的摄像机

3、,所有摄像机的效果、取景、位置运动以及聚焦点等等,都是依靠编程来实现的。画面真实性处理。这是产生三维逼真图像的处理过程,通过消除不可见面,加入明暗阴影、透明、纹理等技术处理来模拟真实的三维物体。 原理、设计和算法 n对于三维图形,需解决如下几个问题:n 如何将三维物体(图形)在二维的显示设备上显示出来;n 如何用空间多边形、曲面来表示三维空间的物体;n 如何解决三维空间物体的消隐问题;n 如何产生逼真的、颜色分布自然的图形。 立方体建模,视立方体建模,视-屏坐标系建模屏坐标系建模 n首先,由于立方体所在的本体坐标系和投影用的视坐标系均存在平移和旋转,为描述这种坐标系的平移和旋转,建立了CAxe

4、s类。该类存储某坐标系(左旋或右旋)原点在世界坐标系中的位置及该坐标系的坐标轴方向在世界坐标系中的方向向量,可对该坐标系相对于世界坐标系的平移和旋转进行描述(众坐标系中,唯有世界坐标系是固定不变的,故将其作为位置、方向计算的参照对象)。 n立方体模型在本体坐标系中建立,可用顶点表、边表或面表模型来表示给定的立方体。边表和面表都是以顶点表为基础生成,所以可单纯用顶点表表示立方体,形成立方体模型最精简的存储结构。因为立方体的显示以面为单位进行(本系统在绘制立方体时只画可见面而未对可见边进行绘制,依靠立方体表面的图案纹理来自然地显示立方体),除了顶点表之外,在模型中增加了面表。面表项由指向该面四个顶

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,-Wid

6、th/2,-Height/2)、(-Depth/2,Width/2,-Height/2)、(Depth/2,Width/2,-Height/2)、(Depth/2,-Width/2,-Height/2)。在立方体模型中用CAxes类型变量来对立方体所在的本体坐标系的平移和旋转进行描述。n设立方体的棱与本体坐标系坐标轴平行,厚度、宽度和高度分别为Depth、Width和Height,中心点位于本体坐标系原点,则由图7-1所示,八个顶点在本体坐标系中的坐标分别为:(Depth/2,Width/2,Height/2)、(-Depth/2,Width/2,Height/2)、(-Depth/2,-Wi

7、dth/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)。在立方体模型中用CAxes类型变量来对立方体所在的本体坐标系的平移和旋转进行描述。n由于视坐标系和屏坐标系相互间空间位置固定,可仅对视坐标系的位置和方向进行描述,并通过视-屏坐标系之间的位置关系来描述屏坐标系。这些位置关系包括:屏平面到视点的距离VD、最近可见点及最远可见点到视点

8、的距离FD和BD、屏平面中点位置(wcu,wcv),屏平面的半边长WSU和WSV。n由于视坐标系和屏坐标系相互间空间位置固定,可仅对视坐标系的位置和方向进行描述,并通过视-屏坐标系之间的位置关系来描述屏坐标系。这些位置关系包括:屏平面到视点的距离VD、最近可见点及最远可见点到视点的距离FD和BD、屏平面中点位置(wcu,wcv),屏平面的半边长WSU和WSV。立方体在本体坐标系中建模立方体的立方体的3D显示显示 n立方体的3D显示流程图如框图1所示。立方体最初定义于自己的局部坐标系(本体坐标系)中,经模型变换,以一定的形状、尺寸存在于世界坐标系的某个位置,再经过观察变换,生成物体在视坐标系中的

9、表示。视见体在视坐标系中经过消隐处理,将剩下的部分投影到屏平面上,再由窗口(屏平面)至视区的变换将其变换到设备坐标系中显示。 模型变换模型变换 观察变换观察变换 消隐处理消隐处理 投影变换投影变换 表面图案纹理的粘贴及光照效果的添加表面图案纹理的粘贴及光照效果的添加 n为了给立方体表面粘贴图案纹理及添加光照效果,必须对投影四边形进行扫描,并且通过纹理映射和光照模型计算求出当前扫描点处的光亮度值进行逐点填充。由于本系统的投影四边形为凸四边形,在进行投影区域扫描时使用了简化的扫描线填充算法。由于篇幅有限,在这里不作详述,以下着重阐述与纹理映射及光照强度计算有关的问题。 纹理映射纹理映射 纹理映射纹

10、理映射纹理映射纹理映射纹理映射纹理映射添加光照效果添加光照效果 添加光照效果添加光照效果实验过程 n本系统图形生成内核部分用标准C+编成,并用该内核和Visual C+ 6.0编程环境开发出可在Windows98下运行的演示程序。图形生成内核部分由四个结构和五个C+类组成 。n 结构POINT3D、POINT2D和VECTOR3D:定义三维、二维坐标点及三维向量,其具体程序定义为:ntypedef structnfloat x,y,z;nPOINT3D;ntypedef structn float x,y;nPOINT2D;ntypedef POINT3D VECTOR3D;n(2) CAxe

11、s类:该类定义某坐标系在世界坐标系中的平移、旋转并定义了与坐标系有关的操作。主要的成员变量有:nPOINT3D center 坐标系在世界坐标系中的平移;nVECTOR3D xn,yn,zn 坐标系三基轴在世界坐标系中的单位方向向量。n主要的成员函数有:nvoid move(VECTOR3D distance) 在世界坐标系中平移坐标系;nvoid revolve_x_axes(float angle) 将坐标系绕基轴x旋转angle角;nvoid revolve_y_axes(float angle) 将坐标系绕基轴y旋转angle角;nvoid revolve_z_axes(float a

12、ngle) 将坐标系绕基轴z旋转angle角。nCAxes可对左旋及右旋坐标系进行描述(两种坐标系在坐标轴方向和坐标系旋转方面有所差别)。 n (3) CVCS类:该类由类 Caxes 继承而来,是对视-屏坐标系的定义。经过精心设计,封装了描述视-屏坐标系必需的变量和函数。基类Caxes 已能完整地描述视-屏坐标系在世界坐标系中的平移和旋转,新增加的成员变量主要用于定义屏平面的尺寸及屏平面在视坐标系中的位置,有:nfloat VD 屏平面与视点之距;nfloat FD,BD 视坐标中可见点的z的最小值和最大值;nfloat WSU,WSV 屏平面的半宽和半高;nfloat wcu,wcv 屏平

13、面中点在视坐标系中的位置。n增加的成员函数有:nvoid WCS_to_VCS(POINT3D pw,POINT3D &pv) 求世界坐标系中的点在视坐标系中的映射坐标;nvoid VCS_to_SCS(POINT3D &pv,POINT2D &ps) 求视坐标系中的点在屏坐标系中的投影坐标;nvoid draw_point(int x,int y,COLORREF color) 在屏平面指定位置画点(对坐标值根据屏平面尺寸裁剪)。ndraw_point实际是通过调用与设备相关的一个外部画点函数实现,该外部函数的地址由CVCS中的一个函数指针void (*draw_po

14、int_func_ptr)(int x,int y,COLORREF color) 存储。这样能够使CVCS中的内容与设备无关,对不同的平台只要定义不同的外部画点函数即可实现移植。实际上该外部画点函数实现了屏平面向设备坐标系的映射。n CTexture类:该类封装了对表面图案纹理的描述,定义了存储表面性质的数组变量和图案位图装载、纹理映射等函数。主要的成员变量有:nunsigned char bitmap512512 图案位图存储数组,用来存储256256彩色位图和 MipMap 反走样算法所用的低分辨率位图的三基色分量;nCOLORREF specular_reflection_rate 表

15、面的镜面反射率;nfloat specular_reflect_n 表面的会聚指数。n主要的成员函数有:nint build_bitmap_from_res_id(unsigned int res_id) 从应用程序的资源表中读入位图的三基色分量并整理成MipMap算法所需的位图存储格式;nCOLORREF MipMap(float u,float v,float d) 由纹理空间参数坐标u、v及屏平面像素在纹理空间中的等效边长d用MipMap反走样算法求纹理值;nvirtual COLORREF get_texture(float u,float v,float d) 供外部调用的求纹理值的

16、函数。 n 结构FACE与 Ccube 类:结构FACE定义了三维四边形表面,内容包括对四边形顶点的定义及对表面纹理的定义,具体声明为:ntypedef structn POINT3D *vertex_ptr4;nCTexture texture;nFACE;n类 Cccube 用于定义本系统的主要描述对象空间立方体,它完整地封装了空间立方体的性质及坐标映射、表面绘制、立方体绘制等函数。主要成员变量有:nCAxes axes 描述立方体本体坐标系;nPOINT3D vertex8 立方体顶点坐标数组;nFACE face6 立方体表面数组。n主要的成员函数有:nvoid build_cube(

17、float depth,float width,float height) 由给定的厚度、宽度、高度创建立方体;nvoid get_s_to_uv_coef(POINT2D ps4) 由投影四边形的顶点坐标计算由屏坐标系向纹理坐标空间映射的映射系数;nint s_to_uvd(POINT2D &ps,float &u,float &v,float &d) 求屏坐标到纹理空间的映射坐标;nint vertex_face_visual(POINT3D vertex4,CVCS *vcs) 判断由世界坐标点表示的空间四边形在给定视坐标系中的可见性;nvoid draw

18、_face(FACE *face,CLight *light,CVCS *vcs) 在指定的屏平面上以给定的光照模型绘制表面;nvoid draw(CLight *light,CVCS *vcs) 在指定的屏平面上以给定的光照模型绘制三维立方体;nvoid OCS_to_WCS(POINT3D &po, POINT3D &pw) 求本体坐标系中的点在世界坐标系的映射坐标。n(6) 结构LIGHT与类CLight:结构LIGHT定义了点光源的空间位置和亮度:ntypedef struct nPOINT3D location;nCOLORREF illuminance;nLIGHT

19、;n类 Clight 定义了点光源数组、点光源增删函数及光亮度计算函数。主要成员变量有:nCOLORREF Ia 环境光亮度;nLIGHT *light_array16 点光源指针数组;nint light_cnt 点光源数目。n主要成员函数有:nint add_light(POINT3D &location,COLORREF illuminance) 增加点光源;nint del_light(int light_id) 删除点光源;nvoid draw_light(CVCS *vcs) 在给定的屏平面上根据光源位置与亮度绘制点光源;nCOLORREF get_illuminance(

20、POINT3D &v,POINT3D &p,VECTOR3D &norm_n,COLORREF diff_reflect_rate,COLORREF spec_reflect_rate,float spec_reflect_n) 根据空间点位置、空间点所在表面在该点处外法向、视点位置、表面反射系数等参数计算该点的光亮度值。 本设计和特点n本系统结构经过精心设计,将各对象及功能模块作了良好封装,整个系统功能扩充非常容易。比如,通过对视-屏坐标系的封装,使双视点(左眼、右眼)甚至多视点模型的生成变得很简单,本系统的演示程序就提供了单/双视点模型选项供用户选择。又如,将 Ctexture 中的纹理获取函数get_texture声明为virtual类型,可以通过重载该函数构造不同的纹理模型(如麻布纹理等)。 结果和讨论 n基于本系统的结构开发了一个粘贴有图案纹理的3D立方体动画显示程序。程序通过多线程技术实现立方体的不断旋转与视区显示刷新,并可通过键盘实现视点漫游。、健分别表示将视线方向

温馨提示

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

评论

0/150

提交评论