扫描线Z-Buffer算法作业说明-Read
北语20春《计算机图形学》作业1满分

(单选题)1: 题面见图片
A: A
B: B
C: C
D: D
正确答案: B
(单选题)2: 种子填充算法中,正确的叙述是___。
A: 按扫描线的顺序进行像素点的填充
B: 四连接算法可以填充八连接区域
C: 四连接区域内的每一像素可以通过上下左右四个方向组合到达
D: 八连接算法不能填充四连通区域
正确答案: C
(单选题)3: 下列不属于消隐算法的是___。
A: z-buffer算法
B: 画家算法
C: 编码法
D: 光线投射算法
正确答案: C
(单选题)4: 题面见图片
A: A
B: B
C: C
D: D
正确答案: C
(单选题)5: 题面见图片
A: A
B: B
C: C
D: D
正确答案: C
(单选题)6: 题面见图片
A: A
B: B
C: C
D: D
正确答案: D
(单选题)7: 在直角坐标系下,平面曲线f(x,y)=0可将平面分为___个点集,当f(x,y) 大于0时,表示的点集为其正侧,至于是曲线的外部还是内部则依赖于曲线的方向。
计算机图形学——隐藏线和隐藏面的消除(消隐算法)

计算机图形学——隐藏线和隐藏⾯的消除(消隐算法)⼀、概述由于投影变换失去了深度信息,往往导致图形的⼆义性。
要消除⼆义性,就必须在绘制时消除被遮挡的不可见的线或⾯,习惯上称作消除隐藏线和隐藏⾯(或可见线判定、可见⾯判定),或简称为消隐。
经过消隐得到的投影图称为物体的真实感图形。
下⾯这个图就很好体现了这种⼆义性。
消隐后的效果图:消隐算法的分类所有隐藏⾯消隐算法必须确定:在沿透视投影的投影中⼼或沿平⾏投影的投影⽅向看过去哪些边或⾯是可见的两种基本算法1、以构成图像的每⼀个像素为处理单元,对场景中的所有表⾯,确定相对于观察点是可见的表⾯,⽤该表⾯的颜⾊填充该像素.适于⾯消隐。
算法步骤:a.在和投影点到像素连线相交的表⾯中,找到离观察点最近的表⾯;b.⽤该表⾯上交点处的颜⾊填充该像素;2、以三维场景中的物体对象为处理单元,在所有对象之间进⾏⽐较,除去完全不可见的物体和物体上不可见的部分.适于⾯消隐也适于线消隐。
算法步骤:a.判定场景中的所有可见表⾯;b.⽤可见表⾯的颜⾊填充相应的像素以构成图形;提醒注意1.假定构成物体的⾯不能相互贯穿,也不能有循环遮挡的情况。
2.假定投影平⾯是oxy平⾯,投影⽅向为z轴的负⽅向。
如果构成物体的⾯不满⾜该假定,可以把它们剖分成互不贯穿和不循环遮挡的情况。
例如,⽤图b中的虚线便可把原来循环遮挡的三个平⾯,分割成不存在循环遮挡的四个⾯。
⼆、可见⾯判断的有效技术1、边界盒指能够包含该物体的⼀个⼏何形状(如矩形/圆/长⽅体等),该形状有较简单的边界。
边界盒技术⽤于判断两条直线是否相交。
进⼀步简化判断2、后向⾯消除(Back-face Removal)思路:把显然不可见的⾯去掉,减少消隐过程中的直线求交数⽬如何判断:根据定义寻找外(或内)法向,若外法向背离观察者,或内法向指向观察者,则该⾯为后向⾯。
注意:如果多边形是凸的,则可只取⼀个三⾓形计算有向⾯积sp。
如果多边形不是凸的,只取⼀个三⾓形计算有向⾯积sp可能会出现错误,即F所在的⾯为前向⾯也可能出现sp≥0的情况,因此,需按上式计算多边形F的有向⾯积。
06-消隐

点与多边形的包含性检测: (1)射线法
P P1 P2 P3 P P1 P2
由被测点P处向 y = - 方向作射线 交点个数是奇数,则被测点在多边形内部。否则,偶数 表示在多边形外部。
若射线正好经过多边形的顶点 ,则采用“左开右闭”的原则来 实现。即:当射线与某条边的顶 点相交时,若边在射线的左侧, 交点有效,计数;若边在射线的 右侧,交点无效,不计数。 用射线法来判断一个点是否 在多边形内一是计算量大,二 是不稳定。原因是射线在经过 多边形顶点时,由于计算机本 身的误差(也许多了0.00001), 把本该无效的交点变成有效的 交点了。所以这种算法是不稳 定的。
上图所画的仅仅是一个简单的立方体,如果一个物体是由多 个形体所组成的,或者整个三维场景是由多个物体构成的,情 况就更为复杂了。 因此,要绘制出意义明确的、富有真实感的立体图形,首 先必须消去形体中的不可见部分,而只在图形中表现可见部 分。这就要去寻求解决显示三维物体的图形中消去不可见部 分的方法,也就是所谓的“消隐”问题。消隐包括消除“隐 藏线”和“隐藏面”两个问题。
消 隐
三维物体的显示和真实感图形是当今计算机图形学研究的 一个焦点。在二维显示设备上显示三维图像, 必须对三维图像 进行消隐处理, 通过消隐处理的物体才能很好的表现三维立体 效果, 但是这种物体明显缺乏真实感, 还需要对物体进行真实 感的处理, 这样才能逼真的显示物体。
主要讲述的内容:
消隐的分类,如何消除隐藏线、隐藏面,主要介绍以 下几个算法:
Z-Buffer算法() { 帧缓存全臵为背景色
深度缓存全臵为最小Z值(比如赋一个10-8次方)
for(每一个多边形)
{扫描转换该多边形
for(该多边形所覆盖的每个象素(x,y) )
图像空间的消隐算法Zbuffer扫描线warnock

第九章:真实感图形学 • 线消隐中最基本的运算 判断面对线的遮挡关系。体也要分解为面,再判断面与线的遮挡关系。在遮挡判断中,要反复 地进行线线、线面之间的求交运算。
图9.5 遮挡关系
第九章:真实感图形学
• 平面对直线段的遮挡判断算法 不失一般性,取视点在Z轴正无穷远,视线为Z轴负方向,物体投影 到XOY平面上。
for(Fj的每一条边Ei) 将二元组< Ei ,j>压入堆栈 While(栈不空) { < Ei ,j0> = 栈顶;
for(j!= j0的每一个面Fj) { if( Ei 被Fj 全部遮挡) { 将Ei 清空; break; } if( Ei 被Fj 部分遮挡) { 从Ei 中将被遮挡的部分裁掉;
5. 以上所求得的各交点将线段的投影分成若干段,求出第一段中点。 6. 若第一段中点在平面的投影内,则相应的段被遮挡,否则不被遮挡;其他段的遮挡关
系可依次交替取值进行判断。 7. 结束。第九章:真实感ຫໍສະໝຸດ 形学图9.6 视点与线段同侧
图9.7 包围盒不交
图9.8 分段交替取值
第九章:真实感图形学
• 线消隐算法 基本数据结构: 面表(存放参与消隐的面) + 线表(存放待显示的线) HiddenLineRemove() { 坐标变换; for(对每个面Fj)
第九章:真实感图形学
③ P在Q之前 如果P的所有顶点在Q所在平面的可见一侧,则Q不会遮挡P的任何部分。完成这一测试需把P的 各顶点坐标代入Q的平面方程,如果所得式子的符号与视点代入方程的符号相同,则P在Q的可见 一侧。面的数据表需包含方程系数。 ④ Q在P之前 如果“P在Q之前”测试失败,应该进行“Q在P之前”的逆测试,即把所有Q的顶点代入P的方程 检验与代入视点得到的符号是否相同,如果测试通过应该把P,Q在深度优先级表中的顺序颠倒过 来。
z-buffer算法的步骤简述

z-buffer算法的步骤简述
Z-buffer算法是一种三维图像处理方法,主要用于解决遮挡关系和深度排序问题。
其基本步骤如下:
1. 初始化Z缓冲区:将Z缓冲区的所有像素值设为最大值
2. 开始绘制场景:对于每个像素,计算出其在视平面上的坐标和深度值
3. 判断当前像素的深度值是否小于其在Z缓冲区中的值,如果是,更新Z缓冲区的值,并将当前像素进行绘制
4. 重复步骤2和3,直到整个场景都被绘制出来
通过这些步骤,可以将复杂的三维场景绘制出来,并且能够正确处理不同物体之间的遮挡和深度关系。
常用的消隐算法及总结

常用的消隐算法及总结数学092邹继瑶 090064摘要:用计算机生成三维物体的真实图形是计算机图形学研究的重要内容。
真实图形在仿真模拟、几何造型、广告影视、指挥控制和科学计算的可视化等许多领域都有广泛应用。
经过消隐得到的投影图称为物体的真实图形。
较常用的消隐算法有画家算法、Z-Buffer算法及其它一些改进算法。
消隐算法从算法基本思想、算法描述和算法步骤等方面对画家算法、Z-Buffer算法和其它改进算法进行了分析,并得出了它们相关的特点。
关键词:计算机图形学消隐景物空间消隐图像空间消隐算法引言:近年来,产生真实的虚拟环境是计算机图形学孜孜以求的目标。
在虚拟对象或场景的创建中要用到许多综合处理过程,每一种都非常令人感兴趣也非常重要。
计算机辅助设计、科学可视化、模拟训练、医疗成像、娱乐、广告等等,所有的这些,都要依赖于当今最前沿的计算机图形技术。
伴随着计算机硬件、软件的飞速发展,计算机图形学技术也得到了质的飞跃。
特别是面向对象技术和多媒体技术取得的成功,使得图形学成为计算机软件业中一个重要的分支。
而程序设计方法、数据库系统和人工智能等新技术渗入到计算机图形学领域,又为计算机图形学提供了更加宽阔的发展空间和强劲动力。
计算机图形学是研究通过计算机将数据转换成图形,并在专用显示设备上显示的原理、方法和技术的学科。
主要介绍了计算机图形系统的基本知识,图形生成与显示的算法,图形的表示与图形的数据结构,图形的几何变换与投影变换,图形的裁剪技术,图形消隐处理,真实感图形的生成等内容。
面消隐作为图形学中一个分支是本文的一个重要的研究内容。
一.消隐的基本概念由于屏幕上的一些图元被另一些图元挡住所造成的。
例如,当需要描绘一个由多边形面组成的三维物体时,那么它的一部分必然要被挡住,要在屏幕上显示的必须是可见的东西。
打个比方,对于一个立方体,无论从哪个方向进行透视处理,最多只能看到其中的三个面。
这样,就要想出一种方法来决定哪些面是所能看到的。
春秋华师计算机图形学在线作业
华师《计算机图形学》在线作业一、单选题(共30道试卷,共60分。
)1.设在存储器中、用于存放调用程序的现场及参数的存储区是()A.堆栈B.缓冲区C.数据区D.程序区正确答案:2.在面片的数量非常大的情况下哪一个消隐算法速度最快—。
A.深度缓存算法B.扫描线消隐算法C.深度排序算法正确答案:3.光笔是一种—设备。
A.输出B.输入C.输入输出D.非输入也非输出正确答案:4.关于光栅扫描式图形显示器,具有这样的特点()A.桢缓存和光栅显示器均是数字设备B.不需要足够的位面和桢缓存才能反映图形的颜色和灰度C.对于彩色光栅显示器的R.G,B三原色需要三个位面的桢缓存和三个个电子枪D.对原色配置颜色查找颜色查找表的目的是为了提高显示的速度;正确答案:5.下列有关平面几何投影的叙述语句中,正确的论述为—。
A.在平面几何投影中,若投影中心移到距离投影面无穷远处,则成为平行投影B.透视投影与平行投影相比,视觉效果更有真实感,而且能真实地反映物体的精确的尺寸和形状C.透视投影变换中,一组平行线投影在与之平行的投影面上,可以产生灭点D.在三维空间中的物体进行透视投影变换,可能产生三个或者更多的主灭点正确答案:6.计算机图形显示器一般使用什么颜色模型?A.RGBB.CMYC.HSVD.HLS正确答案:7.计算机内存编址的基本单位是—。
A.位8.字C.字节D.兆正确答案:8.种子填充算法中,正确的叙述是—。
A.它是按扫描线的顺序进行象素点的填充B.四连接算法可以填充八连接区域C.八连接算法不能填充四连通区域D.四连接区域内的每一象素可以通过上下左右四个方向组合到达正确答案:9.在Hall光透射模型中作了哪些假设?(1)假设光源在无穷远处;(2)假设视点在无穷远处。
()A.仅(1)B.仅⑵C. (1)和(2)D,都没有。
正确答案:10.把汇编语言源程序转换为目标程序,要经过下列哪一个过程()A.连接B.编辑C.编译D.汇编正确答案:11.下列有关平面几何投影的叙述,错误的是—。
3D图像生成算法原理
3D图像生成算法原理一、建齐次坐标二、着色模型三、Z缓存四、纹理映射在这些步骤中,显示部分(GPU)只负责完成第三、四步,而前两个步骤主要就是依靠CPU 来完成。
而且,这还仅仅只就是3D图象的生成,还没有包括游戏中复杂的AI运算。
场景切换运算等等……无疑,这些元素还需要CPU去完成,这就就是为什么在运行大型3D的时候,当场景切换时再强劲的显卡都会出现停顿的现象。
3D芯片的处理对象就是多边形表示的物体。
用多边形表示物体有两个优点:首先就是直接(尽管繁琐),多边形表示的物体其表面的分段线性特征除轮廓外可以通过明暗处理(shading)技术消除;其次就是仅存储多边形顶点的几何信息,多边形内部每个象素的明暗颜色计算所需的信息由这些顶点信息插值而来,这正就是易于用图形硬件支持的快速明暗处理技术。
支持多边形绘制的图形硬件同样也可以绘制由双三次曲面片表示的物体,通过对这种物体的表面进行三角剖分,用逼近的三角形网格代替原物体的曲面表示就可以做到这一点。
当然,用多边形表示物体也有其缺点,如增加了纹理映射与阴影生成的难度,当需要详细表示复杂物体时所需的三角形数量将变得非常庞大。
将多边形表示的物体显示到计算机屏幕上,这一过程涉及物体在计算机内部的表示方式即物体的数据结构,由物体组成的场景的组织结构,物体从场景到屏幕空间要经过的一系列变换,以及产生最终屏幕图象要经过的一系列光栅化处理。
这些方面都涉及到特定的处理算法,相应的算法又有许多不同的变种。
下面仅就3D芯片涉及的图形处理过程及相关算法做一简单分析介绍,这些就是理解3D图形处理及图形硬件的基础。
一、3D物体的表示法具有复杂外形的物体其表面可以由多边形面片来近似表示。
以图1的圆柱为例,其柱面可以由2N个三角形近似,其两端可以由两个N边形来近似。
多边形模型在其轮廓上的分段线性特征就是这一表示法主要的视觉缺陷,改进的唯一途径就是增加多边形的分辨率。
对于一个复杂形体来说,为了充分表示其细节,常常要用到十万个以上的多边形。
Zbuffer算法思想
Zbuffer算法思想一目标:1。
完成扫描线算法Zbuffer2。
完成利用Zbuffer完成Ground模型3。
完成透明效果。
二扫描线Zbuffer数据结构Zbuffer[x,y]每个点所需记录的内容:trueBuffer; //记录BUFFER中每点点所属的“体”zBuffer; //记录每个点的深度faceBuffer; //在光线跟踪时记录每个点所属面的号码,平时与truebuffer构成双//缓存加速算法lightBuffer[3]; //记录每个点的光强,记录RGBbakBuffer[3]; //记录光强的备用构成双缓存,记录RGBtransparentBuffer[3]; //透明光强,记录RGBaBuffer; //透明加权因子buffer 1,不透明,0完全透明扫描行类CheckLine记录的内容:float left_x; //左边界X值float left_dx; //每扫下一行X增加值int left_y; //本条线段还剩多少行要扫float right_x; //右边界X值float right_dx; //每扫下一行X增加值int right_y; //本条线段还剩多少行要扫float start_z; //START点处的Z深度float now_z; //目前的Z深度double delta_zx; //横扫一各Z递增值double delta_zy; //扫下一行Z递增值float left_light; //记录扫描线左面的光强float right_light; //记录扫描线右面的光强float delta_light; //横扫一各光强改变值float left_light_dy; //记录Y每增加1,光强的增加值float right_light_dy;float now_light; //目前的光强值总体所存的内容:leftLine; //目前在扫描的左端的线的序号rightLine; //目前在扫描的左端的线的序号xlimit; //场景的X裁减窗口大小ylimit; //场景的Y裁减窗口大小tpValue; //目前在扫描的面的透明度三扫描线Zbuffer基本算法预处理:对每个体中每个面计算每个顶点在场景中对应的X,Y和Z深度;根据已有关系创建直线,这些直线都以Y小的一端为首点;计算直线的Y轴范围(dy)和Y增加时X的改变值(dx);根据已有关系生成面;计算平面方程,确定dzx,dzy;根据已算出的线段,确定起始点和最小扫描线minY,和最大扫描线maxY。
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缓冲器相应单元的值均不应改变。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
扫描线Z-Buffer算法作业说明
学号20821055
姓名邹松
联系方式zousong@ 1、SRC目录
src目录为算法源代码,编译环境为microsoft visual c++ 2005 express edition,源码中有主要步骤的注释说明。
绘制时用到了OpenGL的glDrawPixels函数,需用到OpenGL库文件和头文件及glut库
2、BIN目录
bin目录为编译好的可执行程序,批处理运行程序,多个测试obj文件。
各个obj文件说明:
cube.obj 为立方体模型,8个点,12个面,36条边。
cone.obj为圆台模型,146个点,288个多边形,864条边;
sphere.obj为球模型,482个点,960个多边形,2880条边;
teapot.obj为茶壶模型,530个点,992个多边形,2976条边;
torus.obj为圆环模型,288个点,576个多边形,1728条边;
torusknot.obj为环形结模型,1440个点,2880个多边形,8640条边;
venusm.obj 为维纳斯像模型,19755个点,43357个多边形,130071个条边。
test.obj为我自己手工建立的obj文件,包含一个五角星和两个三角形,主要测试(凹)多边形(上面几个模型都只有三角形),及多边形互相贯穿的情况。
可执行程序运行方式: SL_Z_buffer [file]
参数分别为obj文件名
默认分别为test.obj
直接运行run.bat文件即可对以上obj文件分别绘制出对应的图像。
使用的可执行程序为每个面片产生随机颜色
运行SL_Z_buffer可绘制test.obj 对应的图像
3、算法说明
与课件中的算法描述有以下区别:
1.分类多边形表,分类边表,活化多边形表及活化边表等均采用STL Vector方式存放而不
是课件中的链表实现。
2.活化边表存放于所属活化多边形结构中,并且活化边表中不是保存左右一对边的信息,
而是相邻两个活化边表构成一个活化边对,因此活化多边形结构在运行过程中始终有偶数个活化边表元素。