扫描线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缓冲器相应单元的值均不应改变。
计算机图形学试卷A卷(含答案)

计算机图形学试卷A卷(含答案)贵州⼤学2009-2010学年第⼆学期考试试卷A 卷计算机图形学注意事项:1. 请考⽣按要求在试卷装订线内填写姓名、学号和年级专业。
2. 请仔细阅读各种题⽬的回答要求,在规定的位置填写答案。
3. 不要在试卷上乱写乱画,不要在装订线内填写⽆关的内容。
4. 满分100分,考试时间为120分钟。
⼀、填空(共20分,每空2分)1、计算机图形学是研究如何利⽤计算机来表⽰、⽣成、处理和显⽰图形原理、算法、⽅法和技术的⼀门学科。
2、在计算机图形学中,物体表⾯的细节称为纹理,纹理可分为两⼤类:⼀类是:图形纹理,另⼀类是:⼏何纹理3、CRT 由电⼦枪,聚焦系统,偏转系统,荧光屏所组成。
4、投影变换可分为平⾏投影和透视投影。
5.Phong 光照模型将环境光、镜⾯反射光、及漫反射光叠加起来形成单⼀光源。
6、在HSI 彩⾊模型中,H 代表⾊调,S 代表饱和度,I 代表亮度(明度) 。
⼆、选择题(共20分,每⼩题2分)1、显⽰器的分辨率为1024*1024的显⽰模式, 显⽰器中每个像素点的灰度等级为256级,则的帧缓存容量⾄少为( B)bit.A,7M B,8M C,10M D,16M 2、以下图形设备中,哪个不是图形输⼊设备( C ).A,图形扫描仪 B,触摸屏 C 、绘图仪 D 、⿏标 3、设点P 的齐次坐标为(8,6,2),其对应的空间坐标为( D ).A,(8,6,2) B,(8,6) C,(4,3,1) D,(4,3)4、当观察光照下的光滑物体表⾯时,在某个⽅向上看到⾼光或强光,这个现象称为( B ).A,漫反射B,镜⾯反射C,环境光D,折射5、在多边形的逐边裁剪法中,对于某条多边形的边(⽅向为从端点S出发到端点P)与某条裁剪线(窗⼝的某⼀边)的⽐较结果共有以下四种情况,分别需输出⼀些顶点.请问哪种情况下输出的顶点是错误的( A ).A:S和P均在可见的⼀侧,则输出S和P.B:S和P均在不可见的⼀侧,则不输出顶点.C:S在可见⼀侧,P在不可见⼀侧,则输出线段SP与裁剪线的交点.D:S在不可见的⼀侧,P在可见的⼀侧,则输出线段SP与裁剪线的交点和P.6、扫描线多边形填充算法中,对于扫描线同各边的交点的处理具有特殊性.当扫描线穿过某两条边的共享顶点,且这两条边分别在该扫描线的上下两侧时,该扫描线与这两条边的交点数只能计为( B )交点:A,0 个B,1个C,2个D,3个7、在Cohen-SutherLand直线裁剪算法中,设端点P1 和P2 的区域编码分别是code1 和code2,若( B ),则P1和P2同在窗⼝的上⽅、下⽅、左⽅或右⽅。
计算机图形学编程练习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窗口编程的书籍有很多,所有的书籍都是方方面面(如窗口、菜单、工具栏、多窗口、多线程….)都介绍。
图形学名词

/qinghua/09/text/chapter7/section4/part01/index1.h tm灭点:指的是立体图形各点延伸线向消失延伸的相交点。
透视点的消失点。
1.如果是平行透视,只有一个灭点,在对象中间的后方。
方法是延长物体左右纵深的两条有会聚趋势的线,向后方会聚与一点。
平行透视能产生纵深感。
2.如果是成角透视,有两个灭点,在对象的两侧的后方。
方法是分别延长物体左右两方的有会聚趋势的四条线,两两交于对象左右两边的后方。
形成两个灭点。
成角透视是最符合视觉习惯的透视。
很富有立体感。
凡是平行于画面的直线都没有灭点,凡是与画面有一定角度的一组平行线,都有灭点。
如果这个角度是90度,就是平行透视。
否则是成角透视。
影灭点——正面自然光照射,阴影向后的消失点。
标识为VS (VANISHINGOFSHADOW)光灭点——影灭点向下垂直于触影面的点。
标识为VL (VANISHINGOFLIGHT)不平行于投影平面的平行线,经过透视投影之后收敛于一点,称为灭点。
主灭点则是平行于坐标轴的平行线产生的灭点。
一点透视变换矩阵。
Mrz=1 0 0 00 1 0 00 0 0 -1/h0 0 0 1两点透视变换矩阵[x y z 1]1 0 0 p =[x y z px + rz + 1]0 1 0 00 0 1 r0 0 0 1三点透视变换矩阵[x y z 1]1 0 0 p =[x y z px + qy + rz + 1]0 1 0 q0 0 1 r0 0 0 1走样光栅系统在理论上只能用光栅网格上的象素近似地描绘平滑的直线、多边形和诸如圆与椭圆那样的曲线图元的边界。
它引起了锯齿或阶梯状,这种视觉人工痕迹是信号处理理论中被称为走样的错误采样的表现(此含义在英文中对应翻译为Aliasing)。
反走样在光栅图形显示器上绘制非水平且非垂直的直线或多边形边界时,或多或少会呈现锯齿状或台阶状外观。
这是因为直线、多边形、色彩边界等是连续的,而光栅则是由离散的点组成,在光栅显示设备上表现直线、多边形等,必须在离散位置采样。
透视投影,与Z-BUFFER求值

假设坐标在 world space 是 Pw = {Xw,Yw,Zw}
经过camera space transform 得到Pe = {Xe,Ye,Ze}
然后经过project transform 转为 device space,这里假设转为 Zp 范围 [-1,1](OPENG的Z BUFFER)
也就是说,不管A和B是什么,在Z BUFFER中的数值,总是和物体顶点在camera space中的 -1/Ze 成线性的关系。 我们要做的就是求A 和B。求A和B,我们利用以下条件:当Ze = far 时, Zp = 1当Ze = near时,Zp = -1(在OPENGL下是这样。在D3D下是Zp =0)这实际是个2元一次方程。有了两个已知解,可以求出A和B。OPENGL下,A = 2nf/(f-n), B = (f+n)/(f-n)
考虑Xp = (Xep - left)*2/(right-left) -1 (Xep = -n* Xe/Ze)Yp = (Yep - left)*2/(right-left) -1 (Yep = -n* Ye/Ze)Zp = A* 1/Ze + B
为了得到4X4 MATRIX,我们需要把(Xp,Yp,Zp,1)转为齐次坐标 (-Xp*Ze, -Yp*Ye, -Zp*Ze, -Ze) 。然后由矩阵乘法公式和上面已知坐标,就可以得到PROJECTION MATRIX。
这样一来,我们就知道Z BUFFER的数值如何求得。先把物体顶点世界坐标Pw变换到camera space中得到Pe。然后再经过透视投影变换,求得Ze->Zp的数值。把这个数值填入Z buffer,就是显卡用来比较哪个像素在前,哪个像素在后的依据了。这也就是为什么near和far设置不合适的时候,很容易发生z fighting。一般情况下,离屏幕很近的一段距离,已经用掉了90%的z 浮点精度。在用于渲染视角里中远距离的场景时,深度的判别只靠剩下的10%精度来进行。具体推导可以看看http://www.cs.kuleuven.ac.be/cwis/research/graphics/INFOTEC/viewing-in-3d/node8.html
《计算机图形学》练习题(问题详解)

《计算机图形学》练习题1.直线扫描转换的Bresenham算法(1) 请写出生成其斜率介于0和1之间的直线的Bresenham算法步骤。
(2) 设一直线段的起点和终点坐标分别为(1,1)和(8,5),请用Bresenham算法生成此直线段,确定所有要绘制象素坐标。
(1)输入线段的两个端点,并将左端点存储在(x0,y0)中将(x0,y0)装入帧缓存,画出第一个点计算常量∆x, ∆y, 2∆y, and 2∆y-2∆x,并得到决策参数的第一个值:p0 = 2∆y - ∆x④从k=0开始,在沿线路径的每个xk处,进行下列检测:如果pk < 0,下一个要绘制的点就是(xk +1,yk) ,并且pk+1 = pk + 2∆y否则下一个要绘制的点就是(xk +1, yk +1),并且pk+1 = pk + 2∆y- 2∆x⑤重复步骤4,共∆x-1次(2)m=(5-1)/(8-1)=0.57x=7 y=4P0=2y-x=12y=8 2y-2x=-6k pk (xk+1,yk+1)0 1 (2,2)1 -5 (3,2)2 3 (4,3)3 -3 (5,3)4 5 (6,4)5 -1 (7,4)6 7 (8,5)2.已知一多边形如图1所示,其顶点为V1、V2、V3、V4、V5、V6,边为E1、E2、E3、E4、E5、E6。
用多边形的扫描填充算法对此多边形进行填充时(扫描线从下到上)要建立边分类表(sorted edge table)并不断更新活化边表(active edge list)。
(1) 在表1中填写边分类表中每条扫描线上包含的边(标明边号即可); (2) 在表2中写出边分类表中每条边结构中各成员变量的初始值(3) 指出位于扫描线y=6,7,8,9和10时活化边表中包含那些边,并写出这些边中的x 值、y max 值、和斜率的倒数值1/m 。
表1边分类表x 表2 边的初始值4 1 1 9 7 4 6 0 05 1 9 76 0 06 1 9 6 6 0 07 1 1 8 7 7 9 0 1 -18 2 7 9 9 1 -19 3 3 6 9 9 9 1 -13. 二维变换(1) 记P(xf,yf)为固定点,sx、sy分别为沿x轴和y轴方向的缩放系数,请用齐次坐标(Homogeneous Coordinate)表示写出二维固定点缩放变换的变换矩阵。
消隐

深度缓存算法 ( Z—Buffer算法)
Z—Buffer ---- 用于存放与屏幕上像素点对应的物体上点的深度值。
y
投影面
z
视线方向
视点位置
x
屏幕像素
F — Buffer
Z—Buffer
Z-buffer算法的步骤如下:
⑴ 初始化ZB和CB,使得ZB(i, j)=Zmax,CB(i, j)=背景色。其中, i=1, 2, …, m,j=1, 2, …, n。 ⑵ 对多边形,计算它在点(i, j)处的深度值zi, j。 ⑶ 若zijZB(i, j),则ZB(i, j)=zij,CB(i, j)=多边形的颜色。 ⑷ 对每个多边形重复⑵、⑶两步。最后,在CB中存放的就是 消隐后的图形。
背面剔除算法
• 背面剔除算法
法向向量N
<90°
cos N V
视线向量V
可见
>90°
法向向量N
<90°
可见
不可见
法向向量N
8.1 消隐基础
8.1.1 消隐的分类
• 线消隐 (Hidden-line)-景物空间消隐 对象:线框模型
•面消隐 (Hidden-surface)-图像空间消隐
对象:填色图
问题: ① 对于线画图形会出现多义性,要增强图形的真实感必须进 行消隐处理。 ②对于光栅扫描着色的面图形则会导致图形错误。
基本概念
二.消隐涉及的算法:
• 排序 • 连贯性
是指所考察的物体或画面的性质在局部区域内保持不变的一种 倾向。
例如:
棱边的连贯性是指:棱边的可见性在它与其他棱边相交时才发生
变换;
for (场景中的每一个物体)
{ 将该物体与场景中的其它物体进行比较,确定其表面的 可见部分;
- 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.活化边表存放于所属活化多边形结构中,并且活化边表中不是保存左右一对边的信息,
而是相邻两个活化边表构成一个活化边对,因此活化多边形结构在运行过程中始终有偶数个活化边表元素。