《计算机图形学》08消隐技术
- 格式:ppt
- 大小:112.00 KB
- 文档页数:24
8.2 Z 缓冲区算法Z 缓冲区算法又称为深度缓冲区算法,它是所有图像空间消隐算法中原理最简单的一种,该算法最早是由Catmull 在1975年提出的,适用于正投影时的消隐处理。
该算法所需要的存储容量较大,既需要有帧缓冲器来存放每个像素的颜色值,还需要有深度缓冲器来存放画面上每一像素对应的可见表面采样点的深度值(Z 坐标值)。
这两个缓冲器的大小和屏幕分辨率有关,如图8-3所示,图形消隐过程就是给帧缓存器和深度缓存器中相应单元填值的过程。
图8-3 显示屏幕、帧缓冲器和深度缓冲器对应关系图 图8-4 Z 缓冲区算法原理 如图8-4所示,假设x O y 面为投影面(屏幕坐标系),由于通常选择Z 轴的负方向为观察方向,因此算法沿着观察系统的Z 轴来计算各景物距离观察平面的深度(Z 坐标值),所以该算法称作Z 缓冲区(Z-buffer )算法。
下面结合图8-3和图8-4说明一下Z 缓冲区算法的原理。
(1)初始化。
首先将帧缓冲器中全部存放背景色,深度缓冲器中所有的单元初始值设置为最小值。
(2)在把物体表面相应的多边形扫描转换成帧缓冲器中的信息之后,对于多边形上的每一个采样点(x,y )进行以下几步处理:①计算采采样点(x,y)的深度值z(x,y)。
②如果z(x,y)大于z 缓冲器中在(x,y)处的值,说明多边形(x,y)处的点比帧缓冲器中(x,y)处现在具有颜色的点更靠近观察者,因此要把z(x,y)存入z 缓冲器中的(x,y )处,再把多边形在z(x,y)c 处的颜色值存入帧缓冲器的(x,y )位置中。
举例来说,如图8-4所示,过屏幕上一点P 做平行于z 轴的射线,与物体表面相交于P 1点和P 2点,则P 1和P 2为物体表面上对象像素P 的点,且P 1和P 2的z 坐标值就是该点的深度值。
当先把P 1点的深度值和缓冲器中相应单元深度值(初始为最小值)进行比较时,由于P 1点的深度值大于深度缓冲器中的深度值,所以把P 1点的颜色值存入帧缓冲器相应的单元中,并把深度缓冲器中的值修改为P 1点的z 坐标值;当处理到P 2点时,将P 2点的z 坐标值和深度缓冲器中的值(P 1点的z 坐标值)进行比较,由于P 2点的z 坐标值大于深度缓冲器中的值,说明P 2点距离观察点更近,则将帧缓冲器中对应单元的值用P 2点的颜色值代替,并将深度缓冲器中对应单元的值替换为P 2点的z 坐标值。
计算机图形学——隐藏线和隐藏⾯的消除(消隐算法)⼀、概述由于投影变换失去了深度信息,往往导致图形的⼆义性。
要消除⼆义性,就必须在绘制时消除被遮挡的不可见的线或⾯,习惯上称作消除隐藏线和隐藏⾯(或可见线判定、可见⾯判定),或简称为消隐。
经过消隐得到的投影图称为物体的真实感图形。
下⾯这个图就很好体现了这种⼆义性。
消隐后的效果图:消隐算法的分类所有隐藏⾯消隐算法必须确定:在沿透视投影的投影中⼼或沿平⾏投影的投影⽅向看过去哪些边或⾯是可见的两种基本算法1、以构成图像的每⼀个像素为处理单元,对场景中的所有表⾯,确定相对于观察点是可见的表⾯,⽤该表⾯的颜⾊填充该像素.适于⾯消隐。
算法步骤:a.在和投影点到像素连线相交的表⾯中,找到离观察点最近的表⾯;b.⽤该表⾯上交点处的颜⾊填充该像素;2、以三维场景中的物体对象为处理单元,在所有对象之间进⾏⽐较,除去完全不可见的物体和物体上不可见的部分.适于⾯消隐也适于线消隐。
算法步骤:a.判定场景中的所有可见表⾯;b.⽤可见表⾯的颜⾊填充相应的像素以构成图形;提醒注意1.假定构成物体的⾯不能相互贯穿,也不能有循环遮挡的情况。
2.假定投影平⾯是oxy平⾯,投影⽅向为z轴的负⽅向。
如果构成物体的⾯不满⾜该假定,可以把它们剖分成互不贯穿和不循环遮挡的情况。
例如,⽤图b中的虚线便可把原来循环遮挡的三个平⾯,分割成不存在循环遮挡的四个⾯。
⼆、可见⾯判断的有效技术1、边界盒指能够包含该物体的⼀个⼏何形状(如矩形/圆/长⽅体等),该形状有较简单的边界。
边界盒技术⽤于判断两条直线是否相交。
进⼀步简化判断2、后向⾯消除(Back-face Removal)思路:把显然不可见的⾯去掉,减少消隐过程中的直线求交数⽬如何判断:根据定义寻找外(或内)法向,若外法向背离观察者,或内法向指向观察者,则该⾯为后向⾯。
注意:如果多边形是凸的,则可只取⼀个三⾓形计算有向⾯积sp。
如果多边形不是凸的,只取⼀个三⾓形计算有向⾯积sp可能会出现错误,即F所在的⾯为前向⾯也可能出现sp≥0的情况,因此,需按上式计算多边形F的有向⾯积。
本科毕业设计题目:计算机图形学消隐算法的分析与实现姓名院系信息科学与工程学院专业计算机科学与技术年级学号指导教师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)计算机图形学消隐算法的分析与实现摘要:用计算机生成具有真实感的三维物体图形,是计算机图形学的一个重要研究内容,而要实现这一过程就不得不提到消隐算法。
计算机图形学实验报告计算机图形学实验报告姓名徐沛华班级1011 学号20101851 成绩实验名称消隐——扫描线算法实验目的1.消除物体在平面上展现的二义性2.掌握扫描线算法实验步骤基本思想:按扫描线顺序,计算扫描线与多边形的相交区间,再用要求的颜色显示这些区间的象素,即完成填充工作。
对于一条扫描线填充过程可以分为四个步骤:(1) 求交:计算扫描线与多边形各边的交点(2) 排序:把所有交点按x 坐标递增顺序来排序(3) 配对:确定扫描线与多边形的相交区间,第一个与第二个,第三个与第四个等等,每对交点代表扫描线与多边形的一个相交区间(4) 填充:显示相交区间的象素实验代码:#include<stdio.h>#include<stdlib.h>#include<conio.h>#include<graphics.h>void draw(int x1,int y1,int x2,int y2,int delta){int nx1,ny1,nx2,ny2;nx1=x1,ny1=y2-delta,nx2=x1+delta,ny2=y2;while((ny1>=y1)&&(nx2<=x2)){line(nx1,ny1,nx2,ny2);ny1-=delta;nx2+=delta;}if(nx2>x2){ny2-=nx2-x2;nx2=x2;while(ny1>y1){line(nx1,ny1,nx2,ny2);ny1-=delta;ny2-=delta;}nx1+=y1-ny1;ny1=y1;while(nx1<x2){line(nx1,ny1,nx2,ny2);nx1+=delta;ny2-=delta;}}else{nx1+=y1-ny1;ny1=y1;while(nx2<x2){line(nx1,ny1,nx2,ny2);nx2+=delta;nx1+=delta;}ny2-=nx2-x2;nx2=x2;while(ny2>y1)}ny2-=nx2-x2;nx2=x2;while(ny2>y1){line(nx1,ny1,nx2,ny2);ny2-=delta;nx1+=delta;}}}int main(void){int x1,y1,y2,x2,delta;int driver=DETECT,mode;printf("Please input lefttop(x1,y1) and rightbottom(x2,y2) of rectangle and delta:\n"); scanf("%d%d%d%d%d",&x1,&y1,&x2,&y2,&delta);initgraph (&driver,&mode,"C:\\TC");rectangle(x1,y1,x2,y2);draw(x1,y1,x2,y2,delta);gotoxy(1,1);printf("Press any key to exit!");getch();closegraph();return 0;}。
实验项目:消隐一、实验目的与要求1、了解各种消隐算法,初步掌握消隐算法的实现2、理解真实感图形的基本原理,掌握真实感图形绘制的基本方法,为进一步掌握计算机图形学中图形处理技术奠定基础。
二、实验内容1、编写程序实现深度缓存器的消隐算法有三个多边形,他们的顶点坐标值分别是:(1)(10,3,20),(20,28,20),(22,28,20),(22,3,20)(2)(5,12,10),(5,20,10),(27,20,10),(27,12,20)(3)(15,15,25),(25,25,5),(30,10,5)。
2、将上题所给的多边形,利用OpenGL函数,绘制其平面,并试添加灯光与纹理效果。
3、*综合运用图形学知识,自行设计一个三维图形,实现消隐以及灯光、纹理等。
三、实验过程深度缓存(Z-buffer)算法帧缓冲器–保存各像素颜色值(CB)z缓冲器 --保存各像素处物体深度值(ZB)z缓冲器中的单元与帧缓冲器中的单元一一对应将z缓冲器中各单元的初始值置为-1(规范视见体的最小n 值)。
当要改变某个像素的颜色值时,首先检查当前多边形的深度值是否大于该像素原来的深度值(保存在该像素所对应的Z缓冲器的单元中),如果大于,说明当前多边形更靠近观察点,用它的颜色替换像素原来的颜色;否则说明在当前像素处,当前多边形被前面所绘制的多边形遮挡了,是不可见的,像素的颜色值不改变。
Z-buffer算法的流程:帧缓冲区初置背景色;z缓冲区个元素初始值置为最小z值(离观察点最远);For(场景中的每个多边形){扫描转换该多边形;For(多边形所覆盖的每一像素点(x,y)){计算多边形在该像素的深度值z(x,y);If(z(x,y)>Zbuffer中对应此像素点(x,y)的z值){把多边形在(x,y)处的深度值z(x,y)存入Z_buffer中的(x,y)处;把多边形在(x,y)处的亮度值存入F_buffer中的(x,y)处;}}}当所有的多边形都处理完之后,帧缓冲器中的内容即为消除隐藏面后的图像。