第5讲 计算机图形学消隐算法
- 格式:ppt
- 大小:1.04 MB
- 文档页数:61
计算机图形学——隐藏线和隐藏⾯的消除(消隐算法)⼀、概述由于投影变换失去了深度信息,往往导致图形的⼆义性。
要消除⼆义性,就必须在绘制时消除被遮挡的不可见的线或⾯,习惯上称作消除隐藏线和隐藏⾯(或可见线判定、可见⾯判定),或简称为消隐。
经过消隐得到的投影图称为物体的真实感图形。
下⾯这个图就很好体现了这种⼆义性。
消隐后的效果图:消隐算法的分类所有隐藏⾯消隐算法必须确定:在沿透视投影的投影中⼼或沿平⾏投影的投影⽅向看过去哪些边或⾯是可见的两种基本算法1、以构成图像的每⼀个像素为处理单元,对场景中的所有表⾯,确定相对于观察点是可见的表⾯,⽤该表⾯的颜⾊填充该像素.适于⾯消隐。
算法步骤:a.在和投影点到像素连线相交的表⾯中,找到离观察点最近的表⾯;b.⽤该表⾯上交点处的颜⾊填充该像素;2、以三维场景中的物体对象为处理单元,在所有对象之间进⾏⽐较,除去完全不可见的物体和物体上不可见的部分.适于⾯消隐也适于线消隐。
算法步骤:a.判定场景中的所有可见表⾯;b.⽤可见表⾯的颜⾊填充相应的像素以构成图形;提醒注意1.假定构成物体的⾯不能相互贯穿,也不能有循环遮挡的情况。
2.假定投影平⾯是oxy平⾯,投影⽅向为z轴的负⽅向。
如果构成物体的⾯不满⾜该假定,可以把它们剖分成互不贯穿和不循环遮挡的情况。
例如,⽤图b中的虚线便可把原来循环遮挡的三个平⾯,分割成不存在循环遮挡的四个⾯。
⼆、可见⾯判断的有效技术1、边界盒指能够包含该物体的⼀个⼏何形状(如矩形/圆/长⽅体等),该形状有较简单的边界。
边界盒技术⽤于判断两条直线是否相交。
进⼀步简化判断2、后向⾯消除(Back-face Removal)思路:把显然不可见的⾯去掉,减少消隐过程中的直线求交数⽬如何判断:根据定义寻找外(或内)法向,若外法向背离观察者,或内法向指向观察者,则该⾯为后向⾯。
注意:如果多边形是凸的,则可只取⼀个三⾓形计算有向⾯积sp。
如果多边形不是凸的,只取⼀个三⾓形计算有向⾯积sp可能会出现错误,即F所在的⾯为前向⾯也可能出现sp≥0的情况,因此,需按上式计算多边形F的有向⾯积。
opengl算法学习---消隐图形系统图形⽣成应⽤程序:顶点帧缓存:像素每个顶点与每个像素都要处理图形系统实现的两种策略基于对象空间基于图像空间图形绘制系统四阶段建模->⼏何处理->光栅化->⽚元处理建模:定义⼏何对象的顶点数据库⼏何处理:投影、图元装配、裁剪、着⾊作⽤于顶点数据光栅化:像素赋颜⾊扫描转换视⼝变换屏幕坐标⽚元处理⽚元赋颜⾊隐藏⾯消除纹理颜⾊消隐当将三维场景投影到⼆维平⾯的时候,需要确定哪些多边形是可见的,哪些是不可见的消隐:消除被遮挡的不可见的线或⾯未经消隐的图形存在的问题:杂乱,⼆义性后向⾯消除外法向:每个多边形指向物体外部的法向量前向⾯:外法向与视线⽅向夹⾓为钝⾓后向⾯:外法向与视线⽅向夹⾓为锐⾓Z-Buffer算法绘制物体时,每⼀个所⽣成像素的深度即z坐标,保存在⼀个缓冲区中,称为z缓冲区或深度缓冲区Z缓冲区中的单元与屏幕像素单元⼀⼀对应如果场景中另外⼀个物体也在同⼀个像素⽣成渲染结果,绘制系统就会⽐较⼆者的深度,保留距离视点较近的物体。
然后将这个所保留的深度保存到深度缓冲区中根据深度缓冲区可正确地实现较近的物体遮挡较远的物体帧缓冲器⼀保存各像素颜⾊值Z缓冲器⼀保存各像素处物体深度值z缓冲器中的单元与帧缓冲器中的单元⼀⼀对应算法思路当要显⽰某个点时,⾸先检查该点处的深度值是否⼤于该像素对应的深度值如果⼤于,说明当前点更靠近视点,⽤它的颜⾊替换像素原来的颜⾊否则说明当前像素处,当前点被前⾯所绘制的点遮挡,不可见,像素颜⾊值不改变伪代码1)初始化:depthBuffer(x,y)=最⼩值(最远深度)frameBuffer(x, y)=I背景2)消隐绘制:for(每⼀个多边形)for(该多边形所覆盖的每个像素(x, y))计算该多边形在该像素的深度值z(x, y);if(z(x, y)>depthBuffer(x, y)){depthBuffer(x, y)=z,frameBuffer(x, y)=I(x, y)}计算采样点(x, y)的深度z (x, y)假定多边形的平⾯⽅程为:Ax+By+Cz+D=Oo扫描线上所有后继点的深度值当处理下⼀条扫描线y=y-1时,该扫描线上与多边形相交的最左边(x最⼩)交点的X值可以利⽤上⼀条扫描线上的最左边的X值计算:深度信息利⽤中伪深度问题当深度值⽐较⼩时,深度⽐较常会产⽣错误当深度值⽐较⼩时,真实深度值上的⼀个⼩变化映射到伪深度值后变为极⼩的变化两个接近的深度值有可能会被映射为相同的伪深度值,这可能会在深度⽐较时导致错误因此需要使⽤更多的位来表⽰伪深度值24位或32位优缺点z缓冲器算法在像素级上以近物取代远物,与形体在屏幕上的出现顺序⽆关优点: 1)简单稳定,利于硬件实现2)不需要整个场景的⼏何数据缺点: 1)需要⼀个额外的z缓冲器2)在每个多边形占据的每个像素处都要计算深度值,计算量⼤扫描线Z-buffer算法Z缓冲器算法中所需要的z缓冲器容量较⼤,为克服这个缺点可以将整个绘图区域分割成若⼲个⼩区域按区域显⽰,这样z缓冲器的单元数只要等于⼀个区域内像素的个数就可以如果将⼩区域取成屏幕上的扫描线,就得到扫描线z缓冲器算法将窗⼝分割成扫描线画家算法画家⾸先绘制距离较远的场景,然后⽤绘制距离较近的场景覆盖较远的部分⾸先将场景中的多边形根据深度进⾏排序,然后按照顺序进⾏绘制这样可⾃然解决可见性问题下列情况⽆法正确排序1.多边形循环遮挡2.多边形相互穿透解决办法:分割成两个算法思想1)先把屏幕置成背景⾊2)先将场景中的物体按其距观察点的远近进⾏排序,结果放在⼀张线性表中;(线性表构造:距观察点远的称优先级低,放在表头;距观察点近的称优先级⾼,放在表尾。
本科毕业设计题目:计算机图形学消隐算法的分析与实现姓名院系信息科学与工程学院专业计算机科学与技术年级学号指导教师2011 年5月10 日毕业设计选题报告毕业设计任务下达书学院信息科学与工程学院专业计算机科学与技术学号****** 姓名*****一、毕业设计题目计算机图形学消隐算法的分析与实现二、主要内容本设计是在对凸多面体的消隐算法、以及Z—Buffer算法进行系统分析以后,应用Visual C++设计程序语言,从而实现对三维立体图形的消隐处理,以得到物体的只是图形。
三、具体要求(1)查找相关资料,理解Visual C++及其图形函数的理论知识;(2)根据设计内容主动分析整体并划分设计模块;(3)根据划分的设计模块独立完成实现各个功能的具体代码;(4)高度重视论文的撰写并调试实现整体功能,主动和指导老师沟通;(5)认真听取指导老师的意见,遵循相关的规定,以达到设计最终效果。
四、主要参考文献[1]陈元琰.张晓竞计算机图形学实用技术[M]. 北京:科学出版社,2000[2]范幸义. 计算机图形学(第三版)[M]. 重庆:重庆大学出版社,2008.2.[3]张全伙,张剑达.计算机图形学[M].北京:机械工业出版社,2003.8.[4](美)Peter Shirley计算机图形学(第二版)[M].北京:人民邮电出版社,2007.6.五、进程安排六、毕业设计任务下达书于年月日发出。
毕业设计应于年月日前完成后交指导教师,由指导教师评阅后提交毕业设计答辩委员会。
七、毕业设计任务下达书一式两份,一份给学生,一份留学院(系)存档。
指导教师:签发于20 年月日分管院长:签发于20 年月日毕业设计开题报告院(系):信息科学与工程学院学号:***注:1、论文(设计)总成绩=指导教师评定成绩(50%)+评阅人评定成绩(20%)+答辩成绩(30%)2、将总成绩由百分制转换为五级制,填入本表相应位置。
目录1. 前言 (3)2. 开发环境和工具 (4)3. 消隐算法的描述 (5)3.1消隐算法的提出 (5)3.2消隐算法的分类 (7)4. 消隐算法的数学知识 (8)4.1向量的叉积 (8)4.2线性代数 (8)4.2.1行列式 (8)4.2.2矩阵 (9)4.3三维坐标与二维坐标的转换 (10)5.几种常见的消隐算法分析与比较 (11)5.1凸多面体消隐处理 (11)5.2隐藏面的消除 (13)5.2.2 画家算法 (16)5.2.3 Z-buffer消隐算法 (19)5.3几种消隐算法的比较 (20)6. 结束语 (21)参考文献 (21)致谢 (22)附录:部分模块代码 (22)计算机图形学消隐算法的分析与实现摘要:用计算机生成具有真实感的三维物体图形,是计算机图形学的一个重要研究内容,而要实现这一过程就不得不提到消隐算法。
消隐算法消隐算法⼀、消隐当我们观察空间任何⼀个不透明的物体时,只能看到该物体朝向我们的那些表⾯,其余的表⾯由于被物体所遮挡我们看不到。
若把可见的和不可见的线都画出来,对视觉会造成多义性。
会有后边两种情况要消除⼆义性,就必须在绘制时消除被遮挡的不可见的线或⾯,习惯上称作消除隐藏线和隐藏⾯,简称为消隐。
消隐不仅与消隐对象有关,还与观察者的位置有关。
⼆、消隐的分类1>按消隐对象分类线消隐:消隐对象是物体的边⾯消隐:消隐对象是物体上的⾯2>按消隐空间分类物体空间的消隐算法:以场景中的物体为处理单位。
假设场景中有k个物体,将其中⼀个物体与其余k-1个物体逐⼀⽐较,仅显⽰它可见表⾯已达到消隐的⽬的。
(此类算法通常⽤于线框图的消隐!)图像空间的消隐算法:以屏幕窗⼝内的每个像素为处理单元。
对屏幕上每个像素进⾏判断,决定哪个多边形在该像素可见(这类算法是消隐算法的主流)三、图像空间的消隐算法:1>Z-buffer算法2>扫描线算法3>Warnock消隐算法画家算法:去除隐藏⾯最简单的算法原理:若场景中有许多物体,就是先画远的物体,再画近的物体。
这样⼀来,近的物体⾃然就会盖住远的物体。
但实际情况并不理想,在三维场景中,⼀个物体可能有些部分远,有些部分近,所以不管⽤什么顺序画,都⽆法得到正确的结果,所以画家算法只能解决简单场景的消隐问题。
Z-buffer算法1、也称Z缓冲区算法和深度缓冲器算法(能跟踪屏幕上每个像素深度的算法),让计算机⽣成复杂图形成为可能。
2、该算法有帧缓冲器和深度缓冲器,对应两个数组:Intensity(x,y)-属性数组(帧缓冲器),存储图像空间每个可见像素的光强或颜⾊Depth(x,y)-深度数组(Z-buffer),存放图像空间每个可见像素的Z坐标。
Z-buffer保存的是经过投影变换后的z坐标,距离眼睛近的地⽅z坐标的分辨率⽐较⼤,远处的分辨率⼩。
3、Z-buffer算法思想(开⼀个和帧缓存⼀样⼤⼩的存储空间,利⽤空间上的牺牲换区算法上的简洁)(1)先将z缓冲器中各单元的初始值置为最⼩值(2)当要改变某个像素的颜⾊值时,⾸先检查当前多边形的深度值是否⼤于该像素原来的深度值(3)如果⼤于原来的z值,说明当前多边形更靠近观察点,⽤它的颜⾊替换像素原来的颜⾊。