4.2mooc-Z-Buffer消隐算法

合集下载

exam

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缓冲区消隐算法的改进

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)算法

图像空间消隐:z缓冲器(z-buffer)算法
如果z(x, y) > zbuffer(x, y),那么
计算该像素(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计算机图形学章节测验期末考试答案

大学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隐面算法的实现

枣庄学院信息科学与工程学院课程设计任务书题目: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算法和其它改进算法进行了分析,并得出了它们相关的特点。

关键词:计算机图形学消隐景物空间消隐图像空间消隐算法引言:近年来,产生真实的虚拟环境是计算机图形学孜孜以求的目标。

在虚拟对象或场景的创建中要用到许多综合处理过程,每一种都非常令人感兴趣也非常重要。

计算机辅助设计、科学可视化、模拟训练、医疗成像、娱乐、广告等等,所有的这些,都要依赖于当今最前沿的计算机图形技术。

伴随着计算机硬件、软件的飞速发展,计算机图形学技术也得到了质的飞跃。

特别是面向对象技术和多媒体技术取得的成功,使得图形学成为计算机软件业中一个重要的分支。

而程序设计方法、数据库系统和人工智能等新技术渗入到计算机图形学领域,又为计算机图形学提供了更加宽阔的发展空间和强劲动力。

计算机图形学是研究通过计算机将数据转换成图形,并在专用显示设备上显示的原理、方法和技术的学科。

主要介绍了计算机图形系统的基本知识,图形生成与显示的算法,图形的表示与图形的数据结构,图形的几何变换与投影变换,图形的裁剪技术,图形消隐处理,真实感图形的生成等内容。

面消隐作为图形学中一个分支是本文的一个重要的研究内容。

一.消隐的基本概念由于屏幕上的一些图元被另一些图元挡住所造成的。

例如,当需要描绘一个由多边形面组成的三维物体时,那么它的一部分必然要被挡住,要在屏幕上显示的必须是可见的东西。

打个比方,对于一个立方体,无论从哪个方向进行透视处理,最多只能看到其中的三个面。

这样,就要想出一种方法来决定哪些面是所能看到的。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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的改进算法虽然减少了 空间,但仍然没考虑相关性和连贯性
相关文档
最新文档