4.2mooc-Z-Buffer消隐算法
exam
一、简述消隐的深度缓存算法及其特点。
深度缓存算法又称Z-buffer算法。
算法首先设置帧缓冲器保存各像素颜色值(CB),并设定z缓冲器用以保存各像素处物体深度值(ZB)。
z缓冲器中的单元与帧缓冲器中的单元一一对应。
算法思路:初始时将CB中每个单元设定为背景色,ZB中每个单元的初始值置为+Zmax (大于场景中的所有Z值)。
当要改变某个像素的颜色值时,首先检查当前多边形的深度值是否小于该像素原来的深度值(保存在该像素所对应的Z缓冲器的单元中),如果小于,说明当前多边形更靠近观察点,用它的颜色替换像素原来的颜色;否则说明在当前像素处,当前多边形被前面所绘制的多边形遮挡了,是不可见的,像素的颜色值不改变。
Z-buffer算法的步骤如下:⑴初始化ZB和CB,使得ZB(i, j)=Z max,CB(i, j)=背景色。
其中,i=1, 2, , m,j=1, 2, , n。
⑵对多边形α,计算它在点(i, j)处的深度值z i, j。
⑶若z ij<ZB(i, j),则ZB(i, j)=z ij,CB(i, j)=多边形α的颜色。
⑷对每个多边形重复⑵、⑶两步。
最后,在CB中存放的就是消隐后的图形。
这个算法的关键在第⑵步,要尽快判断出哪些点落在一个多边形内,并尽快求出一个点的深度值。
优点:原理简单,便于硬件实现。
缺点:(1):ZB和CB两个缓存数组占用的存储单元太多,需要有一个较大容量的Z—Buffer 。
(2):在每个多边形占据的每个像素处都要计算深度值,计算量大二、中心投影法计算投影面上坐标。
(透视投影变换)三、写出Phong光照模型(简单光照模型)并解释模型中各个参数的含义。
E P s=R P⋅cos i⋅I P s+W P(i)cos n s⋅I P sE p s:P点反射的直射光线I P s的光强R P:P点的漫反射系数i:P点的法向量N与入射光方向L的夹角I p s:入射的直射光线的强度W P(i):P点的镜面反射系数(入射角i的函数)n:控制高光的聚散,它和P点的材料有关。
消隐算法
3.消隐中主要考虑的基本问题
• (2)相关性correlativity(连贯性) • 所谓相关性问题是指形体之间或一个 形体的各部分之间引起隐藏现象改变 的相互关系。即场景的可见性在局部 区域内保持不变的倾向 • 通常利用连贯性,来提高排序过程的 效率。
连贯性问题:
• 扫描线的连贯性:
相邻两条扫描线上,可见面的分布情况相似。
一般平面物体的消隐算法 (凹多面体)
• 关于潜在可见面: • 对于单个凸多面体,它的表面不是全部 可见,就是全部不可见。其棱线的可见 性也只有这两种状况。 • 对于凹多面体则不同,它的棱线除了全 部可见、全部不可见外,还有部分可见、 部分不可见的情况 • 如根据外法线向量与视线向量夹角关系 判断得出的可见边9、10、11、12构成的 平面上,9—10全部可见;10—11全部不 可见,而11—12则部分可见 • 因此对凹多面体上经判断后得出的可见 面只能看作为潜在可见面,它上面的每 一条棱线最终的可见情况,还需作进一 步的判定。
• 深度连贯性:
同一表面上的相邻部分深度是相近的,而占据屏幕上同 一区域的不同表面的深度不同。这样在判断表面间的遮挡关系 时,只需取其上一点计算出深度值,比较该深度值即可得到结 果。
• 区域连贯性:区域指屏幕上一组相邻的像素,它们通常为同
一个可见面所占据,可见性相同。区域连贯性表现在一条扫描 线上即为扫描线上的每个区间内只有一个面可见。
• 由向量N和V的数量积得:
N V N V cosθ N V cosθ N V
, 其正、负号与N V一致
(5)表面可见性判断
• 显然表面可见性取决于表 面外法线向量N与视线向 量V之间的夹角θ • 若为0°≤θ≤90°,则该表面 可见 • 若为90°<θ≤180°,则该 表面不可见 • 可得表面可见性判断依据 为: N V N V cosθ • 若N·V≥0,则该表面可见 • 若N· V<0,则该表面不可见 N V cosθ N V
计算机图形学——隐藏线和隐藏面的消除(消隐算法)
计算机图形学——隐藏线和隐藏⾯的消除(消隐算法)⼀、概述由于投影变换失去了深度信息,往往导致图形的⼆义性。
要消除⼆义性,就必须在绘制时消除被遮挡的不可见的线或⾯,习惯上称作消除隐藏线和隐藏⾯(或可见线判定、可见⾯判定),或简称为消隐。
经过消隐得到的投影图称为物体的真实感图形。
下⾯这个图就很好体现了这种⼆义性。
消隐后的效果图:消隐算法的分类所有隐藏⾯消隐算法必须确定:在沿透视投影的投影中⼼或沿平⾏投影的投影⽅向看过去哪些边或⾯是可见的两种基本算法1、以构成图像的每⼀个像素为处理单元,对场景中的所有表⾯,确定相对于观察点是可见的表⾯,⽤该表⾯的颜⾊填充该像素.适于⾯消隐。
算法步骤:a.在和投影点到像素连线相交的表⾯中,找到离观察点最近的表⾯;b.⽤该表⾯上交点处的颜⾊填充该像素;2、以三维场景中的物体对象为处理单元,在所有对象之间进⾏⽐较,除去完全不可见的物体和物体上不可见的部分.适于⾯消隐也适于线消隐。
算法步骤:a.判定场景中的所有可见表⾯;b.⽤可见表⾯的颜⾊填充相应的像素以构成图形;提醒注意1.假定构成物体的⾯不能相互贯穿,也不能有循环遮挡的情况。
2.假定投影平⾯是oxy平⾯,投影⽅向为z轴的负⽅向。
如果构成物体的⾯不满⾜该假定,可以把它们剖分成互不贯穿和不循环遮挡的情况。
例如,⽤图b中的虚线便可把原来循环遮挡的三个平⾯,分割成不存在循环遮挡的四个⾯。
⼆、可见⾯判断的有效技术1、边界盒指能够包含该物体的⼀个⼏何形状(如矩形/圆/长⽅体等),该形状有较简单的边界。
边界盒技术⽤于判断两条直线是否相交。
进⼀步简化判断2、后向⾯消除(Back-face Removal)思路:把显然不可见的⾯去掉,减少消隐过程中的直线求交数⽬如何判断:根据定义寻找外(或内)法向,若外法向背离观察者,或内法向指向观察者,则该⾯为后向⾯。
注意:如果多边形是凸的,则可只取⼀个三⾓形计算有向⾯积sp。
如果多边形不是凸的,只取⼀个三⾓形计算有向⾯积sp可能会出现错误,即F所在的⾯为前向⾯也可能出现sp≥0的情况,因此,需按上式计算多边形F的有向⾯积。
z缓冲区消隐算法的改进
z缓冲区消隐算法的改进
生滨;李东;徐学敢
【期刊名称】《计算机工程与应用》
【年(卷),期】2001(037)023
【摘要】z缓冲区算法是一种比较简单的消隐算法,但算法需要占用相当大的系统资源,且计算量很大.扫描线算法是对z缓冲区算法的改进,该算法大大减少了对系统资源的占用,同时提高了算法的效率.
【总页数】3页(P114-116)
【作者】生滨;李东;徐学敢
【作者单位】哈尔滨工业大学计算机系,;哈尔滨工业大学计算机系,;广东省汕尾港监局船检科,
【正文语种】中文
【中图分类】TP301.6
【相关文献】
1.改进的基于z缓冲器和扫描线算法的消隐技术 [J], 沈润泉
2.Z缓冲器消隐算法的改进 [J], 岳志强;柴炜嘉;齐进
3.凸多面体线消隐算法的研究与改进 [J], 宋人杰;张加玲;李晓栋
4.改进消隐算法下的单体组合模型 [J], 于舜;张铁;刘伟
5.BSP树消隐算法的改进研究 [J], 赵祥好
因版权原因,仅展示原文概要,查看原文内容请购买。
图像空间消隐:z缓冲器(z-buffer)算法
计算该像素(x, y)的光亮值属性并写入帧缓冲器 更新z缓冲器 zbuffer(x, y)=z(x, y)
5
z缓冲器的其它应用
阴影算法:以光源为 视点的z缓冲器
6
z缓冲器的其它应用
rgb和z缓冲器相结合,实现图像的合成
7
z缓冲器算法分析
优点
算法复杂度(O(nN)):对于给定的图像空间,N是固定的,所 以算法复杂度只会随着场景的复杂度线性地增加
无须排序:场景中的物体是按任意顺序写入帧缓冲器和z缓冲 器的,无须对物体进行排序,从而节省了排序的时间
适合于任何几何物体:能够计算与直线交点 适合于并行实现(硬件加速)算法
z (深度)缓冲器算法属于图像空间算法 z缓冲器是帧缓冲器的推广
帧缓冲器:存储的是像素的颜色属性 z缓冲器:存储的是对应像素的z值
假设在视点坐标系(oxyz)中,投影平面为z=0,视线方向沿(-z)轴方向, 投影为平行投影
深度值就是物体沿着视线(-z)方向、与视点的距离 离视点近的物体遮挡离视点远的物体:z值越大,离视点越近
2
z缓冲器算法
投影变换示意图
3
颜色与深度缓冲举例
颜色缓冲
深度缓冲
4
z缓冲器算法描述
(1) 帧缓冲器中的颜色置为背景颜色 (2) z缓冲器中的z值置成最小值(离视点最远) (3) 以任意顺序扫描各多边形
a) 对于多边形中的每一像素,计算其深度值z(x,y) b) 比较z(x, y)与z缓冲器中已有的值zbuffer(x,y)
不足
z缓冲器需要占用大量的存储单元
一个大规模复杂场景中:深度范围可能为106,一个 像素需要24bit来存储其深度信息。如果显示分辨率 为1280×1024,那么深度缓冲器需要4MB存储空间
大学mooc计算机图形学章节测验期末考试答案
解忧书店 JieYouBookshop
青春须早为,岂能长少年。
第二讲测验
1
单选 (2 分)
种子填充算法中,正确的论述是 A.四连通算法的数据结构采用的是队列结构 B.四连通算法可以填充八连通区域 C.它是按扫描线的顺序进行像素点的填充 D.四连通区域内的每一象素可以通过上下左右四个方向组合到达
正确答案:A、B 你没选择任何选项
3
判断 (1 分)
使用齐次坐标可以将 n 维空间的一个点向量唯一的映射到 n+1 维空间中
©解忧书店,严禁转载,违者必究!
4 / 16
正确答案:×
青春须早为,岂能长少年。
第六讲测验
1
单选 (2 分)
透视投影中主灭点最多可以有几个? A.3 B.1 C.2 D.0
A 正确答案: 你没选择任何选项
正确答案:C、D 你没选择任何选项
2
多选 (2 分)
在区域分割(Warnack)消隐算法中,窗口与多边形的关系包括哪些? A.包围 B.内含 C.相交 D.分离
©解忧书店,严禁转载,违者必究!
3 / 16
正确答案:A、B、C、D 你错选为 D
青春须早为,岂能长少年。
第五讲测验
1
多选 (2 分) 下述对坐标系的描述哪些是正确的?
2
单选 (2 分)
有关平面几何投影的叙述,错误的是 A.斜投影又可分为斜等测、斜二测 B.正轴测又可分为正一测、正二测 C.透视投影又可分为一点透视、二点透视、三点透视 D.三视图又可分为主视图、侧视图、俯视图
B 正确答案: 你没选择任何选项
3
多选 (2 分)
在下列对投影的描述里,正确的论述为 A.太阳光线产生的投影为平行投影 B.物体经过透视投影后可产生缩放的效果 C.三视图属于透视投影 D.透视投影与平行投影相比,视觉效果更有真实感,而且能真实地反映物体的精确的尺 寸和形状
计算机图形学课程设计-Z-Buffer隐面算法的实现
枣庄学院信息科学与工程学院课程设计任务书题目:Z-Buffer隐面算法的实现姓名:秦云学号:201012110128专业班级:计算机科学与技术、2010级本1班课程:计算机图形学指导教师:燕孝飞职称:讲师完成时间:2012年12 月----2013年1 月枣庄学院信息科学与工程学院制2012年12 月30日课程设计任务书及成绩评定目录第1章引言 (1)第2章计算机图形学的发展历史 (2)2.1 智能CAD (2)2.2计算机美术与设计 (2)2.2.1 计算机美术的发展 (2)2.3计算机动画艺术 (3)2.3.1历史的回顾 (3)2.4科学计算可视化 (4)2.5虚拟现实 (4)第3章计算机图形学的研究方向 (6)第4章 Z-Buffer隐面算法的相关原理 (7)4.1 Z-Buffer隐面算法简介 (7)4.2 Z-Buffer隐面算法程序 (7)第5章系统设计的相关代码 (8)5.1坐标设置函数的相应代码 (8)5.2旋转角度函数相应代码 (8)5.3多边形填充 (9)第6章系统的运行效果 (12)6.1运行主界面 (12)6.2不同方向键的运行效果 (13)第7章总结 (16)第1章引言计算机图形学一个主要的目的就是要利用计算机产生令人赏心悦目的真实感图形。
为此,必须建立图形所描述的场景的几何表示,再用某种光照模型,计算在假想的光源、纹理、材质属性下的光照明效果。
所以计算机图形学与另一门学科计算机辅助设计有着密切的关系。
事实上,图形学也把可以表示几何场景的曲线曲面造型技术和实体造型技术作为其主要的研究内容。
同时,真实感图形计算的结果是以数字图像的方式提供的,计算机图形学也就和图像处理有着密切的关系。
真实感图形绘制过程中,由于投影变换失去了深度信息,往往导致图形的二义性。
要消除这类二义性,就必须在绘制时消除被遮挡的不可见的线或面,习惯上称之为消除隐藏线和隐藏面,或简称为消隐,经过消隐得到的投影图称为物体的真实图形。
常用的消隐算法及总结
常用的消隐算法及总结数学092邹继瑶 090064摘要:用计算机生成三维物体的真实图形是计算机图形学研究的重要内容。
真实图形在仿真模拟、几何造型、广告影视、指挥控制和科学计算的可视化等许多领域都有广泛应用。
经过消隐得到的投影图称为物体的真实图形。
较常用的消隐算法有画家算法、Z-Buffer算法及其它一些改进算法。
消隐算法从算法基本思想、算法描述和算法步骤等方面对画家算法、Z-Buffer算法和其它改进算法进行了分析,并得出了它们相关的特点。
关键词:计算机图形学消隐景物空间消隐图像空间消隐算法引言:近年来,产生真实的虚拟环境是计算机图形学孜孜以求的目标。
在虚拟对象或场景的创建中要用到许多综合处理过程,每一种都非常令人感兴趣也非常重要。
计算机辅助设计、科学可视化、模拟训练、医疗成像、娱乐、广告等等,所有的这些,都要依赖于当今最前沿的计算机图形技术。
伴随着计算机硬件、软件的飞速发展,计算机图形学技术也得到了质的飞跃。
特别是面向对象技术和多媒体技术取得的成功,使得图形学成为计算机软件业中一个重要的分支。
而程序设计方法、数据库系统和人工智能等新技术渗入到计算机图形学领域,又为计算机图形学提供了更加宽阔的发展空间和强劲动力。
计算机图形学是研究通过计算机将数据转换成图形,并在专用显示设备上显示的原理、方法和技术的学科。
主要介绍了计算机图形系统的基本知识,图形生成与显示的算法,图形的表示与图形的数据结构,图形的几何变换与投影变换,图形的裁剪技术,图形消隐处理,真实感图形的生成等内容。
面消隐作为图形学中一个分支是本文的一个重要的研究内容。
一.消隐的基本概念由于屏幕上的一些图元被另一些图元挡住所造成的。
例如,当需要描绘一个由多边形面组成的三维物体时,那么它的一部分必然要被挡住,要在屏幕上显示的必须是可见的东西。
打个比方,对于一个立方体,无论从哪个方向进行透视处理,最多只能看到其中的三个面。
这样,就要想出一种方法来决定哪些面是所能看到的。
图像空间的消隐算法Z-buffer扫描线warnock
10 / 41
第九章:真实感图形学
• 如果消隐对象有N条棱,当N很大时,用两两求交的方法 工作量很大 O(N2) 。为提高算法效率,要设法减少求交的 工作量。 • 设V为由视点出发的观察向量,N为某多边形面的法向量。 若 V· N>0 ,称该多边形为后向面。若 V· N<0 ,称该多边形 为前向面。如下图中的 JEAF 、 HCBG 和 DEABC 所在的面 均为后向面。 • 后向面总是看不见的,由于后向面的遮挡,别的棱成为 不可见-》可以把后向面去掉,并不影响消隐结果。
2018/11/8 3 / 41
第九章:真实感图形学
• Southerland根据消隐空间的不同,将消隐算法分为三类: 1. 物体空间的消隐算法 (光线投射、Roberts) 将场景中每一个面与其他每个面比较,求出所有点、边、 面遮挡关系。 2. 图像空间的消隐算法 (Z-buffer、扫描线、warnock) 对屏幕上每个象素进行判断,决定哪个多边形在该象素可 见。 3. 物体空间和图像空间的消隐算法 (画家算法) 在物体空间中预先计算面的可见性优先级,再在图像空间 中生成消隐图。
第九章:真实感图形学
9.1 消隐 真实图形在仿真模拟、几何造型、广告影视、指挥控制 和科学计算的可视化等许多领域有广泛应用。 用计算机生成三维物体的真实图形,是计算机图形学研 究的重要内容。 显示设备描述物体的图形时,必须把三维信息经过某种 投影变换,在二维的显示表面上绘制出来。由于投影变 换失去了深度信息,往往导致图形的二义性 ( 如图 9.1 所 示)。要消除二义性,就必须在绘制时消除被遮挡的不可 见的线或面,称作消除隐藏线和隐藏面,或简称为消隐。 经过消隐得到的投影图称为物体的真实图形。
2018/11/.6 视点与线段同侧
4.3mooc-区间扫描线算法
二、区间扫描线算法前面介绍了经典的z-buffer算法,思想是开一个和帧缓存一样大小的存储空间,利用空间上的牺牲换取算法上的简洁还介绍了只开一个缓存变量的z-buffer算法,是把问题转化成判别点在多边形内,通过把空间多边形投影到屏幕上,判别该像素是否在多边形内下面介绍区间扫描线算法。
该算法放弃了z-buffer的思想,是一个新的算法,这个算法被认为是消隐算法中最快的因为不管是哪一种z-buffer算法,都是在像素级上处理问题,要进行消隐,每个像素都要进行计算判别,甚至一个像素要进行多次(一个像素可能会被多个多边形覆盖)F 2F 31a 1a 2a 3a 4a 5a 6a 7a 8扫描线的交点把这条扫描线分成了若干个区间,每个区间上必然是同样一种颜色对于有重合的区间,如a6a7这个区间,要么显示F2的颜 色,要么显示F3的颜色,不会出现颜色的跳跃如果把扫描线和多边形的这些交点都求出来,对每个区间,只要判断一个像素的要画什么颜色,那么整个区间的颜色都解决了,这就是区间扫描线算法的主要思想F 2F 31a 1a 2a 3a 4a 5a 6a 7a 8算法的优点:将象素计算改为逐段计算,效率大大提高!如何实现这个算法?首先要有投影多边形,然后求交点,然后交点进行排序排序F 2F 3F 1a 1a 2a 3a 4a 5a 6a 7a 8排序的结果就分成了一个个区间,然后在每个区间找当中的一个像素(i,j),在(i,j)处计算每个相关面的z值,对相关深度值z进行比较,其中最大的一个就表示是可见的。
整个这段区间就画这个z值最大面的颜色如何确定小区间的颜色?F 2F 3F 1a 1a 2a 3a 4a 5a 6a 7a 8(1)小区间上没有任何多边形,如[a4,a5],用背景色显示F 2F 3F 1a 1a 2a 3a 4a 5a 6a 7a 8(2)小区间只有一个多边形,如[a1,a2],显示该多边形的颜色(3)小区间上存在两个或两个以上的多边,比如[a6,a7],必须通过深度测试判断哪个多边形可见这个算法存在几个问题:利用增量算法简化求交!1、真的去求交点吗?2、每段区间上要求z值最大的面,这就存在一个问题。
Z缓冲器算法和扫描线算法
11
9 8
7
Ⅰ
Ⅱ
3
1
o
3
6 78
图 7.15 要消隐的物体
10 11 x
Z缓冲器算法和扫描线算法
• 建立一个边Y筒
–每个筒的深度和显示屏幕行数相同。
–根据边两端点较大的Y坐标值为决定放入边Y筒的相应行数。 –边Y筒中记录的每一条边要保存下列信息:
• 和该边在oxy平面上的投影相交的扫描线条数Δy, • 该投影和相邻的两条扫描线交点的x坐标的差Δx,(由上到下扫描) • 该边所属多边形的编号IP
• 建立一个多边形Y筒
– 每个筒的深度和显示屏幕行数相同。
– 根据多边形顶点Y坐标最大值来决定放入多边形Y筒的相应行数。 – 多边形Y筒要记录多边形所在平面方程ax+by+cz+d=0系数a,b,c和d, – 还要记录和该多边形在oxy平面上的投影相交的扫描线的条数Δy, – 以及多边形的属性colour和编号IP。
–一是和多边形Ⅰ在oxy平面上的投影相交的两条边 –另一是和多边形Ⅱ投影相交的两条边。
11
9 8
7
Ⅰ
Ⅱ
3
1
o
3
6 78
图 7.15 要消隐的物体
10 11 x
xl 4, xl 1, yl 3; xr 7, xr 0, yr 3; zl1 , zx1 , zy1 , IP1
xl
6
5 6
,
xl
这点的z坐标值和z缓冲器中相应单元内的值作
比较。
只有前者大于后者时才改变帧缓冲器的那一个单元的值,同时z缓冲器中相应 单元的值也要改成这点的z坐标值。 如果这点的z坐标值小于z缓冲器中相应单元的值,则说明对应象素已显示了 物体上一个点的属性,该点比要考虑的点更接近观察者。这样,无论帧缓冲 器或z缓冲器相应单元的值均不应改变。
计算机图形学编程练习Z-buffering算法实现
计算机图形学编程练习7:Z-buffering算法实现Z-buffering算法1974年,E. Catmull在其博士学位论文中提出了Z-buffering算法,目前已成为使用最广泛的隐藏面消除算法,其特点:易于通过软件或硬件实现,与图形的绘制流水线结构兼容等。
Z-buffering是帧缓冲器,用来存储图像空间中每一个可见像素相应的深度或z坐标,是一个独立的深度缓冲器。
计算准备写入帧缓冲器像素的深度值即z值,并与已存储在Z-buffer中该像素的原深度比较。
如果新像素位于帧缓冲器上原像素的前面,则将新像素写入帧缓冲区,同时Z-buffer缓冲器用新的z值更新。
否则,不写入也不更新。
算法的实质是对一个给定的x、y,查找最大的z(x,y)值。
本次练习,要求用扫描线填充算法以及Z-buffering算法来绘制多边形,实现隐藏面消除。
具体的算法参见:7.11.3以及7.11.5节,或者更为详细的《计算机图形学的算法基础》中4.15 扫描线Z缓冲器算法。
场景数据:空间中有一个矩形,其顶点坐标为P1(10, 5, 10),P2(10, 25, 10),P3(25, 25, 10),P4(25, 5, 10),颜色为(0, 0, 255),另有一个三角形,其顶点坐标为P5(15, 15, 15),P6(25, 25, 5),P7(30, 10, 5),颜色为(255, 0, 0)。
三角形从后面贯穿矩形,如下左图所示。
要求用640 x 480的图像分辨率显示,使用深度为32位的Z-buffer,即Z-buffer为640 x 480 x 32位平面。
视点在z轴正向无穷远处,平行投影,投影平面为z = 50,视景体为(0, 40, 0, 35, 0, 40)。
图1:a) 三维视图;b) 二维投影;作业要求●本次练习的主要学习目标:▪学习使用MFC编程(包括简单的GDI编程,最后图像利用CDC::SetPixel绘制);▪学习扫描线填充算法;▪学习Z-buffering算法;注意:●若遇到画图闪烁,可采用double buffer技术解决,参见memdc.h.●若想在MFC框架下查看printf, cout输出信息,可使用ConsoleDebug.cpp.如何学习MFC窗口编程?MFC窗口编程的书籍有很多,所有的书籍都是方方面面(如窗口、菜单、工具栏、多窗口、多线程….)都介绍。
消隐算法(一)——Z-buffer算法
消隐算法(⼀)——Z-buffer算法第四讲消隐算法⼀、消隐消隐:(消除⼆义性)就是必须在绘制时消除被遮挡的不可见的线或⾯,习惯上称作消除隐藏线和隐藏⾯;消隐不仅与消隐对象有关还与观察者的位置有关。
1.1消隐的分类1.1.1按消隐对象分类(1)线消隐:消隐对象是物体上的边,消除的是物体上不可见的边。
(2)⾯消隐:消隐对象是物体上的⾯,消除的是物体上不可见的⾯,通常做【真实感图形】消隐时⽤⾯消隐。
1.1.2按消隐空间分类(1)物体空间消隐算法:以场景中的【物体】为处理单元,假设场景中有k个物体,将其中⼀个物体与其余k-1个物体逐⼀⽐较,仅显⽰它可见表⾯以达到消隐的⽬的,通常⽤于【线框图】的消隐。
1.Roberts算法:要求所有被显⽰的物体都是凸的,对于凹体要先分割成多个凸体的组合。
【计算量甚⼤】2.光线投射法:⼀条视线与场景中的物体可能有许多交点,求出这些交点后需要排序,在前⾯的才能被看到。
光线投射:是求光线(视线,如视点与象素连成的线)与场景的交点。
(2)图像空间消隐算法:以屏幕窗⼝内的每个【象素】为处理单元。
确定在每⼀个象素处,场景中的k个物体哪⼀个距离观察点【最近】,从⽽⽤它的颜⾊来显⽰该象素。
【消隐算法的主流】画家算法:要做到去除隐藏⾯的最简单的⽅法。
如果⼀个场景中有许多物体,就是先画远的东西,再画近的东西。
这样⼀来,近的东西⾃然就会盖住远的东西。
这张图⽚由于三个部分互相叠加,⽆法判断谁最远谁最近,所以⽤画家算法就⽆法解决。
——>画家算法只能解决【简单场景】的消隐问题。
1.Z-buffer算法(深度缓冲器算法)帧缓冲器对应数组:intensity(x,y)——>属性数组(帧缓冲器)存储图像每个空间可见象素的光强或颜⾊深度缓冲器对应数组:depth(x,y)——>深度数组(z-buffer)存放图像空间每个可见象素的z坐标假设xoy⾯为投影⾯,z轴为观察⽅向,过屏幕上任意象素点(x,y)做平⾏于z轴的射线R,与物体表⾯相交于p1,p2点,p1和p2点的z值称为该点的深度值,z-buffer算法⽐较p1和p2的z值,将最⼤的z值存⼊z缓冲器中,显然屏幕上(x,y)显⽰p1点的颜⾊。
一种3D图形背面消隐算法及其硬件加速实现
一种3D图形背面消隐算法及其硬件加速实现
随着科技的不断发展,3D图形渲染技术也在不断进步,其中背面消隐算法是其中一个重要的技术。
在3D图像中,如果不进行背面消隐处理,会造成图像混乱,影响视觉效果。
因此,背面消隐算法是实现高质量3D图像的重要一环。
一种常用的背面消隐算法是Z-Buffer算法,它的实现原理是将所有像素点按照深度值进行排序,把深度值最小的像素点输出到屏幕上。
这个算法的优点是简单易懂,但缺点是需要大量的内存来存储深度缓存区,会消耗大量的计算资源。
为了提高背面消隐算法的效率,硬件加速实现是一种有效的途径。
硬件加速可以通过专门的加速卡来实现Z-Buffer算法的处理,大大提高了图像处理的速度。
例如,NVIDIA的GeForce专业显卡中就内置了Z-Buffer处理器,可以实现高性能的背面消隐算法。
另一个硬件加速实现的途径是在图形处理器(GPU)中实现背面消隐算法。
在GPU中,背面消隐算法可以通过着色器来实现。
在顶点着色器中,将顶点的坐标与视图矩阵相乘,得到其在相机坐标系中的坐标;在片元着色器中,将片元的深度值与深度缓存区中的值进行比较,找出最前面的像素点输出到屏幕上。
这种方法的优点是可以获得更高的性能,缺点是需要GPU的支持。
总之,背面消隐算法是实现高质量3D图像的必需技术之一。
通过硬件加速的方式,可以大大提高算法的处理速度,实现更好的视觉效果。
4.1mooc-消隐算法简介和分类
光线投射是求光线与场景的交点,该光线就是所谓的视线( 如视点与像素连成的线) 一条视线与场景中的物体可能有许多交点,求出这些交点后 需要排序,在前面的才能被看到。人的眼睛可以一目了然, 但计算机做需要大量的运算
(2)图像空间的消隐算法 以屏幕窗口内的每个像素为处理 单元。确定在每一个像素处,场 景中的k个物体哪一个距离观察点 最近,从而用它的颜色来显示该 像素
} for(场景中的每一个物体) { 将该物体与场景中的其 它物体进行比较,确定 其表面的可见部分; 显示该物体表面的可见 部分;
在物体空间里典型的消隐算法有两个: Roberts算法和光 线投射法 Roberts算法数学处理严谨,计算量甚大。算法要求所有被 显示的物体都是凸的,对于凹体要先分割成多个凸体的组 合
for(窗口中的每一个像素) {确定距视点最近的物体, 以该物体表面的颜色来显 示像素; }
这类算法是消隐算法的主流!
因为最后看到的图像是在屏幕上的,所以就拿屏幕作为处理 对象。针对屏幕上的像素来进行处理,算法的思想是围绕着 屏幕的。对屏幕上每个象素进行判断,决定哪个多边形在该 象素可见。
计算机图形学
第二章:光栅图形学算法
光栅图形学算法的研究内容
直线段的扫描转换算法 多边形的扫描转换与区域填充算法 直线裁剪算法 反走样算法 消隐算法
主要讲述的内容:
消隐的分类,如何消除隐藏线、隐藏面,主要介绍以下 几个算法:
Z缓冲区(Z-Buffer)算法 扫描线Z-buffer算法 区域子分割算法Βιβλιοθήκη 线框图消隐图真实感图形
消隐包括消除“隐藏线”和“隐藏面”两个问题
到目前为止,虽然已有数十种算法被提出来了,但是由于物 体的形状、大小、相对位置等因素千变万化,因此至今它仍 吸引人们作出不懈的努力去探索更好的算法 消隐不仅与消隐对象有 关,还与观察者的位置 有关
计算机图形学消隐算法的分析与实现
本科毕业设计题目:计算机图形学消隐算法的分析与实现姓名院系信息科学与工程学院专业计算机科学与技术年级学号指导教师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)计算机图形学消隐算法的分析与实现摘要:用计算机生成具有真实感的三维物体图形,是计算机图形学的一个重要研究内容,而要实现这一过程就不得不提到消隐算法。
第8章消隐
连贯性
• 物体连贯性
– 若物体A与物体B是完全分离的,消隐时只需要比较两物体之间的遮挡关系即可, 不需要对它们的表面多边形逐一进行测试;
• 面的连贯性
– 一张面内的各种属性值一般是缓慢变化的,可采用增量的形式对其进行计算;
• 区域连贯性
– 一个区域一般指屏幕上一组相邻的象素,他们通常为同一个可见面所占据,可 见性相同;
消隐算法分类
根据实现时所在的坐标系或空间: 根据实现时所在的坐标系或空间: 1 、 图像空间算法(image space) , 在屏幕坐标系中实 现,(一旦达到屏幕分辨率,就不再计算下去) 一旦达到屏幕分辨率,就不再计算下去)
– 在投影屏幕上,以屏幕像素为采样单位,确定投影于每一像素的可见 景物表面区域 – 将其颜色作为该像素的显示光亮度
例如:
生变换; 生变换
棱边的连贯性是指:棱边的可见性在它与其他棱边相交时才发 棱边的可见性在它与其他棱边相交时才发
面都是可见的。 面都是可见的
如果面的一部分是可见的, 面的连贯性是指:如果面的一部分是可见的,则一般情况下整个 如果面的一部分是可见的
一般:选择 轴的负向为观察方向 轴的负向为观察方向. 一般:选择z轴的负向为观察方向
Zi, j = —
j
axi + byi + d c
若 c = 0,则多边形Fk的法线方向与 Z 轴垂直, Fk在投影 面上的投影为一条直线,可不予考虑。
8.2.2 区间扫描线算法
• 在多边形填充算法中,活性边表的使用取得了节省运
行空间的效果。用同样的思想改造Z-buffer算法:将 整个绘图区域分割成若干个小区域,然后一个区域一 个区域地显示,这样Z缓冲器的单元数只要等于一个区 域内像素的个数就可以了。如果将小区域取成屏幕上 的扫描线,就得到扫描线Z缓冲器算法。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
象限变化 I I I II I III I IV …
p3
y p1 (+, +) p2
(-, +)
p
p4
p5 x
(+, -)
(-, -)
(+, -)
同一个象限认为是0,跨过一个象限是/2,跨过二个象限 是。这样当要计算代数和的时候,就不要去投影了,只 要根据点所在的象限一下子就判断出多少度,这样几乎没 有什么计算量,只)是否在pk的投影多边形之内, 不是一件容易的事。节省了空间但牺牲了时间。计算机的很 多问题就是在时间和空间上找平衡 另一个问题计算多边形Pk在点(i,j)处的深度。设多边 形Pk的平面方程为:
ax by cz d 0
ai bj d depth c
4
E
p
代数和为0,点在多边形外部 代数和为2,点在多边形内部 代数和为,点在多边形边上
这个算法为什么是稳定的?假如算出来后代数和不是0,而 是0.2或0.1,那么基本上可以断定这个点在外部,可以认为 是有计算误差引起的,实际上是0。 但这个算法效率也不高,问题是算弧长并不容易,因此又 派生出一个新的方法—以顶点符号为基础的弧长累加方法
z-Buffer算法的优点: (1)Z-Buffer算法比较简单,也很直观 (2)在象素级上以近物取代远物。与物体在屏幕上的出现 顺序是无关紧要的,有利于硬件实现
z-Buffer算法的缺点: (1)占用空间大 (2)没有利用图形的相关性与连续性,这是z-buffer算法 的严重缺陷 (3)更为严重的是,该算法是在像素级上的消隐算法
三、图像空间的消隐算法
这类算法是消隐算法的主流! Z-buffer算法 扫描线算法 Warnock消隐算法
1、Z缓冲区(Z-Buffer)算法 1973年,犹他大学学生艾德·卡姆尔(Edwin Catmull)独 立开发出了能跟踪屏幕上每个像素深度的算法 Z-buffer Z-buffer让计算机生成复杂图形成为可能。Ed Catmull目 前担任迪士尼动画和皮克斯动画工作室的总裁
2、只用一个深度缓存变量zb的改进算法 一般认为,z-Buffer算法需要开一个与图象大小相等的缓 存数组ZB,实际上,可以改进算法,只用一个深度缓存变 量zb
z-Buffer算法() { 帧缓存全置为背景色 for(屏幕上的每个象素(i,j)) { 深度缓存变量zb置最小值MinValue for(多面体上的每个多边形Pk) { if(象素点(i,j)在pk的投影多边形之内) { 计算Pk在(i,j)处的深度值depth; if(depth大于zb) { zb = depth; indexp = k;(记录多边形的序号) } } } If(zb != MinValue) 计算多边形Pindexp在交点 (I,j) 处的光照 颜色并显示 } }
每个单元存放对应 象素的颜色值
每个单元存放对应 象素的深度值
假定xoy面为投影面,z轴为 观察方向 过屏幕上任意像素点(x,y) 作平行于z轴的射线R,与物 体表面相交于p1和p2点 p1和p2点的z值称为该点的深 度值
z
y
p2
R
p1
x,y
屏幕
0
x
y
z-buffer算法比较p1和p2的z值, 将最大的z值存入z缓冲器中 显然,p1在p2前面,屏幕上(x,y) 这一点将显示p1点的颜色
Z缓冲器算法也叫深度缓冲器算法,属于图像空间消隐算法 该算法有帧缓冲器和深度缓冲器。对应两个数组: intensity(x,y)——属性数组(帧缓冲器) 存储图像空间每个可见像素的光强或颜色 depth(x,y)——深度数组(z-buffer) 存放图像空间每个可见像素的z坐标
屏幕
帧缓冲器
Z缓冲器
0 z
x,y
p2
R
p1
屏幕
x
算法思想:先将Z缓冲器中各单元的初始值置为最小值。当 要改变某个像素的颜色值时,首先检查当前多边形的深度 值是否大于该像素原来的深度值(保存在该像素所对应的Z 缓冲器的单元中) 如果大于原来的z值,说明当前多边形更靠近观察点,用它 的颜色替换像素原来的颜色
Z-Buffer算法() { 帧缓存全置为背景色 深度缓存全置为最小z值 for(每一个多边形) { 扫描转换该多边形 for(该多边形所覆盖的每个象素(x,y) ) {计算该多边形在该象素的深度值Z(x,y); if(z(x,y)大于z缓存在(x,y)的值) {把z(x,y)存入z缓存中(x,y)处 把多边形在(x,y)处的颜色值存入帧缓存的(x,y)处 } } } }
用射线法来判断一个点是否在多边形内的弊端: (1)计算量大 (2)不稳定
(2)弧长法
B D E A a1
A
a
1
C
B
a
2
C
a a
3
D
P
a
5
4
E
p
以p点为圆心,作单位圆,把边投影到单位圆上,对应一段段 弧长,规定逆时针为正,顺时针为负,计算弧长代数和
B D
C
B
a
2
C
a
3
D
E A a1
A
a
a
1
P
a
5
点与多边形的包含性检测: (1)射线法
y P
由被测点P处向 y = - 方 向作射线 交点个数是奇数,则被测点在 多边形内部 交点个数是偶数表示在多边形外部
P
x
若射线正好经过多边形的顶点,则 采用“左开右闭”的原则来实现 即:当射线与某条边的顶点相交 时,若边在射线的左侧,交点有 效,计数;若边在射线的右侧, 交点无效,不计数
(3)以顶点符号为基础的弧长累加方法 p是被测点,按照弧长法,p点 的代数和为2 不要计算角度,做一个规定来 取代原来的弧长计算
p3
(-, -)
y p1 (+, +)
p2
(-, +)
p
p4
p5 x
(+, -)
(+, -)
弧长变化 (+ +) (+ +) (+ +) (+ +) … (+ (((+ … + + ) ) ) ) 0 /2 -/2 …
z-buffer算法是非常经典和重要的,在图形加速卡和固件 里都有。只用一个深度缓存变量zb的改进算法虽然减少了 空间,但仍然没考虑相关性和连贯性