图像空间的消隐算法
- 格式:ppt
- 大小:1.96 MB
- 文档页数:41
计算机图形学——隐藏线和隐藏⾯的消除(消隐算法)⼀、概述由于投影变换失去了深度信息,往往导致图形的⼆义性。
要消除⼆义性,就必须在绘制时消除被遮挡的不可见的线或⾯,习惯上称作消除隐藏线和隐藏⾯(或可见线判定、可见⾯判定),或简称为消隐。
经过消隐得到的投影图称为物体的真实感图形。
下⾯这个图就很好体现了这种⼆义性。
消隐后的效果图:消隐算法的分类所有隐藏⾯消隐算法必须确定:在沿透视投影的投影中⼼或沿平⾏投影的投影⽅向看过去哪些边或⾯是可见的两种基本算法1、以构成图像的每⼀个像素为处理单元,对场景中的所有表⾯,确定相对于观察点是可见的表⾯,⽤该表⾯的颜⾊填充该像素.适于⾯消隐。
算法步骤:a.在和投影点到像素连线相交的表⾯中,找到离观察点最近的表⾯;b.⽤该表⾯上交点处的颜⾊填充该像素;2、以三维场景中的物体对象为处理单元,在所有对象之间进⾏⽐较,除去完全不可见的物体和物体上不可见的部分.适于⾯消隐也适于线消隐。
算法步骤:a.判定场景中的所有可见表⾯;b.⽤可见表⾯的颜⾊填充相应的像素以构成图形;提醒注意1.假定构成物体的⾯不能相互贯穿,也不能有循环遮挡的情况。
2.假定投影平⾯是oxy平⾯,投影⽅向为z轴的负⽅向。
如果构成物体的⾯不满⾜该假定,可以把它们剖分成互不贯穿和不循环遮挡的情况。
例如,⽤图b中的虚线便可把原来循环遮挡的三个平⾯,分割成不存在循环遮挡的四个⾯。
⼆、可见⾯判断的有效技术1、边界盒指能够包含该物体的⼀个⼏何形状(如矩形/圆/长⽅体等),该形状有较简单的边界。
边界盒技术⽤于判断两条直线是否相交。
进⼀步简化判断2、后向⾯消除(Back-face Removal)思路:把显然不可见的⾯去掉,减少消隐过程中的直线求交数⽬如何判断:根据定义寻找外(或内)法向,若外法向背离观察者,或内法向指向观察者,则该⾯为后向⾯。
注意:如果多边形是凸的,则可只取⼀个三⾓形计算有向⾯积sp。
如果多边形不是凸的,只取⼀个三⾓形计算有向⾯积sp可能会出现错误,即F所在的⾯为前向⾯也可能出现sp≥0的情况,因此,需按上式计算多边形F的有向⾯积。
《计算机图形学》实验报告实验十一真实感图形一、实验教学目标与基本要求初步实现真实感图形, 并实践图形的造型与变换等。
二、理论基础运用几何造型, 几何、投影及透视变换、真实感图形效果(消隐、纹理、光照等)有关知识实现。
1.用给定地形高程数据绘制出地形图;2.绘制一(套)房间,参数自定。
三. 算法设计与分析真实感图形绘制过程中, 由于投影变换失去了深度信息, 往往导致图形的二义性。
要消除这类二义性, 就必须在绘制时消除被遮挡的不可见的线或面, 习惯上称之为消除隐藏线和隐藏面, 或简称为消隐, 经过消隐得到的投影图称为物体的真实图形。
消隐处理是计算机绘图中一个引人注目的问题, 目前已提出多种算法, 基本上可以分为两大类:即物体空间方法和图象空间方法。
物体空间方法是通过比较物体和物体的相对关系来决定可见与不可见的;而图象空间方法则是根据在图象象素点上各投影点之间的关系来确定可见与否的。
用这两类方法就可以消除凸型模型、凹形模型和多个模型同时存在时的隐藏面。
1).消隐算法的实现1.物体空间的消隐算法物体空间法是在三维坐标系中, 通过分析物体模型间的几何关系, 如物体的几何位置、与观察点的相对位置等, 来进行隐藏面判断的消隐算法。
世界坐标系是描述物体的原始坐标系, 物体的世界坐标描述了物体的基本形状。
为了更好地观察和描述物体, 经常需要对其世界坐标进行平移和旋转, 而得到物体的观察坐标。
物体的观察坐标能得到描述物体的更好视角, 所以物体空间法通常都是在观察坐标系中进行的。
观察坐标系的原点一般即是观察点。
物体空间法消隐包括两个基本步骤, 即三维坐标变换和选取适当的隐藏面判断算法。
选择合适的观察坐标系不但可以更好地描述物体, 而且可以大大简化和降低消隐算法的运算。
因此, 利用物体空间法进行消隐的第一步往往是将物体所处的坐标系转换为适当的观察坐标系。
这需要对物体进行三维旋转和平移变换。
常用的物体空间消隐算法包括平面公式法、径向预排序法、径向排序法、隔离平面法、深度排序法、光线投射法和区域子分法。
计算机图形学-习题库及答案1、计算机图形显⽰器和绘图设备表⽰颜⾊的⽅法各是什么颜⾊系统?它们之间的关系如何?1、计算机图形显⽰器是⽤RGB⽅法表⽰颜⾊,⽽绘图设备是⽤CMY⽅法来表⽰颜⾊的。
它们之间的关系是:两者都是⾯向硬件的颜⾊系统,前者是增性原⾊系统,后者是减性原⾊系统,后者是通过在⿊⾊⾥加⼊⼀种什么颜⾊来定义⼀种颜⾊,⽽后者是通过指定从⽩⾊⾥减去⼀种什么颜⾊来定义⼀种颜⾊2、简述帧缓存与显⽰器分辨率的关系。
分辨率分别为640×480,1280×1024,和2560×2048的显⽰器各需要多少字节位平⾯数为24的帧缓存?2、帧缓存的⼤⼩和显⽰器分辨率之间的关系是:帧缓存的⼤⼩=显⽰器分辨率的⼤⼩*帧缓存的3、画直线的算法有哪⼏种?画圆弧的算法有哪⼏种?c1)逐点⽐较法;(2)数值微分法;(3)Bresenham算法。
画弧线的常⽤⽅法有:(1)逐点⽐较法;(2)⾓度DDA法;(3)Bresenham算法。
4、分别写出平移、旋转、缩放及其组合的变换矩阵。
4、1)平移变换:其中, , , 是物体在三个坐标⽅向上的位移量。
2)旋转变换:绕Z轴旋转的公式为:绕X轴旋转的公式为:绕Y轴旋转的公式为:如果旋转所绕的轴不是坐标轴,设其为任意两点p1,p2所定义的⽮量,旋转⾓度为。
则可由7个基本变换组合构成:1.使p1,点与原点重合;2.,使轴p1p2落⼊平⾯xoz内;3.,使p1p2与z轴重合;4.,执⾏绕p1p2轴的⾓旋转;5.,作3的逆变换;6.,作2的逆变换;7.作1的逆变换。
3)缩放变换:其中,,,是物体在三个⽅向上的⽐例变化量。
记为。
若对于某个⾮原点参考点进⾏固定点缩放变换,则通过如下的级联变换实现:5、如何⽤⼏何变换实现坐标系的变换?坐标系的变换,亦即将某⼀坐标系lcs1中的点变换为另⼀个坐标系lcs2下的坐标。
若,矩阵的推导分三步。
1)将lcs1中的点变换到世界坐标系的矩阵 ;x_axis, y_axis, z_axis 为lcs1中x,y,z轴⽮量在世界坐标系的表⽰org为lcs1中原点在世界坐标系的表⽰2)将世界坐标系的点变换到lcs2中的点矩阵 ;x_axis, y_axis, z_axis 为lcs1中x,y,z轴⽮量在世界坐标系的表⽰org为lcs1中原点在世界坐标系的表⽰a = - x_axis.x * org.x - x_axis.y * org.y - x_axis.z * org.zb = - y_axis.x * org.x - y_axis.y * org.y - y_axis.z * org.zc = - z_axis.x * org.x - z_axis.y * org.y - z_axis.z * org.z6、写出⼏种线裁剪算法;写出⼏种多边形裁剪算法。
Z-buffer算法1、Z缓冲区(Z-Buffer)算法1973年,犹他⼤学学⽣艾德·卡姆尔(Edwin Catmull)独⽴开发出了能跟踪屏幕上每个像素深度的算法 Z-buffer Z-buffer让计算机⽣成复杂图形成为可能。
Ed Catmull⽬前担任迪⼠尼动画和⽪克斯动画⼯作室的总裁Z缓冲器算法也叫深度缓冲器算法,属于图像空间消隐算法该算法有帧缓冲器和深度缓冲器。
对应两个数组:intensity(x,y)——属性数组(帧缓冲器)存储图像空间每个可见像素的光强或颜⾊depth(x,y)——深度数组(z-buffer)存放图像空间每个可见像素的z坐标假定xoy⾯为投影⾯,z轴为观察⽅向过屏幕上任意像素点(x,y)作平⾏于z轴的射线R,与物体表⾯相交于p1和p 2 点p1和p 2点的z值称为该点的深度值z-buffer算法⽐较p1和p 2的z值,将最⼤的z值存⼊z缓冲器中显然,p1在p 2前⾯,屏幕上(x,y)这⼀点将显⽰p1点的颜⾊算法思想:先将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)处}}}} z-Buffer算法的优点:(1)Z-Buffer算法⽐较简单,也很直观(2)在象素级上以近物取代远物。
与物体在屏幕上的出现顺序是⽆关紧要的,有利于硬件实现z-Buffer算法的缺点:(1)占⽤空间⼤(2)没有利⽤图形的相关性与连续性,这是z-buffer算法的严重缺陷(3)更为严重的是,该算法是在像素级上的消隐算法2、只⽤⼀个深度缓存变量zb的改进算法⼀般认为,z-Buffer算法需要开⼀个与图象⼤⼩相等的缓存数组ZB,实际上,可以改进算法,只⽤⼀个深度缓存变量zb z-Buffer算法(){ 帧缓存全置为背景⾊for(屏幕上的每个象素(i,j)){ 深度缓存变量zb置最⼩值MinValuefor(多⾯体上的每个多边形Pk){if(象素点(i,j)在pk的投影多边形之内){计算Pk在(i,j)处的深度值depth;if(depth⼤于zb){ zb = depth;indexp = k;(记录多边形的序号)}}}If(zb != MinValue) 计算多边形Pindexp在交点 (I,j) 处的光照颜⾊并显⽰}}关键问题:判断象素点(i,j)是否在pk的投影多边形之内,不是⼀件容易的事。
图形、消隐的一种实现——深度消隐算法的一种实现张世海[1]梁晓梅[2]([1]吉林省计算中心吉林长春130012[2]吉林省衡鑫贸易有限公司吉林长春130021)[摘要]根据Bourand的算法思想,改造Bresenham算法,以实现对于直线基元、三角基元的深度消隐,从而绘制有深度消隐功能的复杂图形。
[关键词]深度消隐图形基元[中图分类号]TP3 [文献标识码]A[文章编号]1009-5349(2013)11-0025-02消隐处理是计算机图形学设计的一个非常艰巨的任务,一个没有消隐的图形看起来是杂乱无章的,只有消除了隐藏线和隐藏面的图形看起来才与自然感观相符合,这也是真实化图形的基础,本文就是建立图形基元的深度消隐算法。
基元是建立图形系统和应用的基石。
要通过编程的方式来显示一个特定的场景时,点、边和三角形是最基本的图形。
因为任何一个空间的物体都可以用三角形小面来逼近,而任何一个多边形,无论它是单连通区域还是多连通区域,都可以通过细化规则转换成多个三角形来处理。
定义基元是基于图形描述和图形应用的方便性的。
深度消隐算法是一种基于图形空间的消隐算法。
把每一个像素点都视为是三维的,Z表示像素深度,如果不同面片上的点被投影到屏幕上的同一点,则只有离视点最近的点的属性才是该点(在屏幕上)的最终属性。
典型的属性包括颜色和深度。
深度消隐算法在实现上有很大的不同,文献中采用了平面公式法计算内点的深度,用空间直线方程来计算边界直线和边界坐标。
这样处理的好处是,对于图形的内点,不同的扫描线均采用同一增量。
这样只需计算扫描线的起点和终点的X 坐标,从而大大加快了运算。
但是,该算法在处理复杂的曲面时,面片和面片相交的地方常出现深度迁跃现象。
笔者根据Gouraud的思想,基于Bresenham算法,采用双线性插值法计算三角形内点的深度,采用沿边自适应线性增量法计算边界深度。
这种算法简单,便于硬件实现,并且不需要对面片进行排序,对于具有中等复杂程度的场景速度也比较快。
消隐算法的分类
根据消隐空间的不同,消隐算法可分为两类:1. 物体空间的消隐算法:物体空间是物体所在的空间,即规范化投影空间。
这类算法是将物体表面上的K个多边形中的每一个面与其余的K-1个面进行比较,精确求出物体上每条边或每个面的遮挡关系。
计算量正比于K2。
2.图象空间的消隐算法:图象空间就是屏蒂坐标空间,这类算法对屏幕的每一象素进行判断 ,以决定物体上哪个多边形在该象素点上是可见的。
若屏蒂上有mxn个象素点,物体表面上有K个多边形,则该类消隐算法计算量正比于mnK。