消隐算法

一、消隐

当我们观察空间任何一个不透明的物体时,只能看到该物体朝向我们的那些表面,其余的表面由于被物体所遮挡我们看不到。

若把可见的和不可见的线都画出来,对视觉会造成多义性。

会有后边两种情况

要消除二义性,就必须在绘制时消除被遮挡的不可见的线或面,习惯上称作消除隐藏线和隐藏面,简称为消隐。

消隐不仅与消隐对象有关,还与观察者的位置有关。

二、消隐的分类

1>按消隐对象分类

线消隐:消隐对象是物体的边

面消隐:消隐对象是物体上的面

2>按消隐空间分类

物体空间的消隐算法:

以场景中的物体为处理单位。假设场景中有k个物体,将其中一个物体与其余k-1个物体逐一比较,仅显示它可见表面已达到消隐的目的。(此类算法通常用于线框图的消隐!)

图像空间的消隐算法:

以屏幕窗口内的每个像素为处理单元。对屏幕上每个像素进行判断,决定哪个多边形在该像素可见(这类算法是消隐算法的主流)

三、图像空间的消隐算法:

1>Z-buffer算法

2>扫描线算法

3>Warnock消隐算法

画家算法:去除隐藏面最简单的算法

原理:若场景中有许多物体,就是先画远的物体,再画近的物体。这样一来,近的物体自然就会盖住远的物体。

但实际情况并不理想,在三维场景中,一个物体可能有些部分远,有些部分近,所以不管用什么顺序画,都无法得到正确的结果,所以画家算法只能解决简单场景的消隐问题。

Z-buffer算法

1、也称Z缓冲区算法和深度缓冲器算法(能跟踪屏幕上每个像素深度的算法),让计算机生成复杂图形成为可能。

2、该算法有帧缓冲器和深度缓冲器,对应两个数组:

Intensity(x,y)-属性数组(帧缓冲器),存储图像空间每个可见像素的光强或颜色

Depth(x,y)-深度数组(Z-buffer),存放图像空间每个可见像素的Z坐标。

Z-buffer保存的是经过投影变换后的z坐标,距离眼睛近的地方z坐标的分辨率比较大,远处的分辨率小。

3、Z-buffer算法思想

(开一个和帧缓存一样大小的存储空间,利用空间上的牺牲换区算法上的简洁)

(1)先将z缓冲器中各单元的初始值置为最小值

(2)当要改变某个像素的颜色值时,首先检查当前多边形的深度值是否大于该像素原来的深度值

(3)如果大于原来的z值,说明当前多边形更靠近观察点,用它的颜色替换像素原来的颜色。

4、伪代码

Z-buffer算法(){

帧缓存全置为背景色

深度缓存全置为最小z值(比如赋一个10^-8次方)

For(每一个多边形){

扫描转换该多边形

For(该多边形所覆盖的每个像素(x,y)){

计算该多边形在该像素的深度值Z(x,y);

If(Z(x,y)大于Z缓存在(x,y)的值){

把Z(x,y)存入Z缓存中(x,y)处

把多边形在(x,y)处的颜色值存入帧缓存的(x,y)处

}

}

}

}

5、优点:

(1)算法简单直观

(2)在像素级上以近物取代远物。与物体在屏幕上的出现顺序是无关紧要的,有利于硬件实现

(3)内存容量不再是问题后很受欢迎

6、缺点

(1)占空间大(因为要开一个和帧缓冲器一样大的数组,多了z缓存)

(2)没有利用图形的相关性和连续性(提高算法的效率要利用图形的相关性和连续性)

(3)是在像素级上的消隐算法

Z-buffer算法的改进(只用一个深度缓存变量zb的改进算法)

1、将缓存数组zb改为一个深度缓存变量zb

2、伪代码

Z-buffer算法(){

帧缓存全置为背景色

For(屏幕上的每个像素(i,j)){

深度缓存变量zb置最小值MinValue

For(多面体上的每个多边形Pk){

If(像素点(i,j)在Pk的投影多边形之内){

计算Pk在(i,j)处的深度值depth;

If(depth>zb){

Zb=depth;

Index=k;(记录多边形的序号)

}

}

}

If(zb!=MinValue)

计算多边形Pindex在交点(i,j)处的光照颜色并显示

}

}

关键问题:判断像素点(i,j)在Pk的投影多边形之内不容易

深度如何求?多边形的平面方程为ax+by+cz+d=0,可得出z值

点与多边形的包含性检测

一、射线法

1、由被测点P处向y=-无穷方向作射线

2、交点个数是奇数,则被测点在多边形内部,交点个数是偶数,则被测点在多边形外部

3、若射线正好经过多边形的顶点,则采用“左开右闭”的原则来实现

即:当射线与某边的顶点相交时,若边在射线的左侧,交点有效,计数;若边在射线的右侧,交点无效,不计数;

4、用射线法来判断一个点是否在多边形内的弊端:

(1)计算量大(因为要大量求交)

(2)不稳定(左开右闭有误差,在左边但由于误差算在了右边,不计数了)

二、弧长法

以P点为圆心作单位圆,把边投影到单位圆上,对应一段段弧长,规定逆时针为正,顺时针为负,计算弧长代数和

代数和为0,点在多边形外部;代数和为2π,点在多边形内部;代数和为π,点在多边形边上

算法为什么稳定?即使算出来后代数和不为0,而是0.1或0.2,那么基本可以断定这个点在外部,可以认为是有计算误差引起的。

但是算弧长并不容易,因此派生出一个新的方法-

以顶点符号为基础的弧长累加方法

1、不计算角度,用一个规定取代原先的计算

3、同一个象限认为是0,跨过一个象限是π/2,跨过两个象限是π。这样当要计算代数和的时候,就不用投影了,只要根据点所在的象限一下子就判断出多少度,这样几乎没什么计算量,只有一些简单的判断,效率高。

区间扫描线算法

1、该算法放弃了z-buffer算法,是一个新的算法,这个算法被认为是消隐算法中最快的之一,因为不管是哪一种z-buffer算法,都是在像素级上处理问题,每个像素都要进行判断,甚至一个像素要进行多次(一个像素可能会被多个多边形覆盖)

2、

3、主要思想:如果把扫描线和多边形的交点求出来,对每个区间,只要判断像素画什么颜色,那么整个区间的颜色都解决了(单位是区间)

4、如何确定小区间的颜色?

(1)小区间上没有任何多边形,如[a4,a5],用背景色显示

(2)小区间上只有一个多边形,如[a1,a2],显示该多边形的颜色

(3)小区间上存在两个或两个以上的多边形,如[a6,a7],必须通过深度测试判断哪个多边形可见

原文地址:https://www.cnblogs.com/keguniang/p/9704338.html

时间: 2024-10-10 02:19:37

消隐算法的相关文章

消隐算法二

摘 要 造 型 是 计 算 机 三 维 图 形 处 理 的 基 础, 而 消 隐 则 是 三 维 造 型 的 关 键. 本 文 剖 析 了 当 前 在CAD 三 维 图 形 处 理 中 最 主 要 的8 种 物 体 空 间 消 隐 算 法 和4 种 图 象 空 间 消 隐 算 法. ---- 关 键 词 造 型. 消 隐. 物 体 空 间 法. 图 象 空 间 法 ---- 分 类 号 ---- 造 型(modeling) 是 计 算 机 三 维 图 形 处 理 的 基 础, 而 消 除 隐 藏

消隐算法的总结与展望

1 引言 消隐(Hidden Surface Removal)是在一定观察方向下消除不可见的线和面.有时也称为可见性测试.虽然各种消隐算法在可见性测试和不可见面消除方法上区别不大.但这些消隐方法有时还可以一起被统称为不可见面的消除.简称消隐.在三维造型技术.真实感图形的显示.虑拟场景的显示.以及在地形.地图的绘制中.消隐都起到至关重要的作用.所以研究和实现消隐算法,并根据场景的复杂度和各个不同应用领域的场景来提高消隐算法的速度是很有必要的,它对整个三维图形显示.真实感图形的显示以及各种地形地貌图

计算机图形学(三种画线算法)

第二章:光栅图形学算法 1.光栅显示器:光栅扫描式图形显示器简称光栅显示器,是画点设备,可看作是一个点阵单元发生器,并可控制每个点阵单元的亮度 2.由来:随着光栅显示器的出现,为了在计算机上处理.显示图形,需要发展一套与之相适应的算法. 3.研究内容: 1>直线段的扫描转换算法 2>多边形的扫描转换与区域填充算法 3>裁剪算法 4>反走样算法 5>消隐算法 一.直线段的扫描转换算法 1.为了显示一条直线,就在光栅显示器上用离散的像素点逼近直线,所以我们就要知道这些像素点的坐标

Z-buffer算法

1.Z缓冲区(Z-Buffer)算法 1973年,犹他大学学生艾德·卡姆尔(Edwin Catmull)独 立开发出了能跟踪屏幕上每个像素深度的算法 Z-buffer Z-buffer让计算机生成复杂图形成为可能.Ed Catmull目 前担任迪士尼动画和皮克斯动画工作室的总裁 Z缓冲器算法也叫深度缓冲器算法,属于图像空间消隐算法 该算法有帧缓冲器和深度缓冲器.对应两个数组: intensity(x,y)--属性数组(帧缓冲器) 存储图像空间每个可见像素的光强或颜色 depth(x,y)--深度

模拟试题B

模拟试题B 一.单项选择题(2′*8 =16′) 1.灰度等级为256级,分辨率为2048*1024的显示器,至少需要的帧缓存容量为( ) A)512KB B)1MB C)2MB D)3MB 2.在多形边面片的数量非常大的情况下,哪一个消隐算法速度最快? ( ) A)深度缓存算法(Z-Buffer) B)光线跟踪算法 C)画家算法 D)不确定 3.双线性光强插值法(Gouraud Shading)存在哪些问题?( ) A)光照强度在数值上不连续 B)生成多面体真实感图形效果差 C)生成曲面体真实

模拟试题C

模拟试题C 一.单项选择题(2′*14 =28′) 1.双线性法向插值法(Phong Shading)的优点是( ) A)法向计算精确 B)高光域准确 C)对光源和视点没有限制 D)速度较快 2.用编码裁剪法裁剪二维线段时,判断下列直线段采用哪种处理方法.假设直线段两个端点M.N的编码为1000和1001(按TBRL顺序)( ) A)直接舍弃 B)直接保留 C)对MN再分割求交 D)不能判断 3.下面哪个不是齐次坐标的特点( ) A)用n+1维向量表示一个n维向量 B)将图形的变换统一为图形的坐

图形学复习

交互式计算机图形学(第五版)1-7章课后题答案 计算机图形学基础答案全 计算机图形学考试重点计算题 What is the difference between Gouraud and Phong shading? Gouraud shading (AKA Smooth Shading) is a per-vertex color computation. What this means is that the vertex shader must determine a color for e

OpenCASCADE Hidden Line Removal

OpenCASCADE Hidden Line Removal [email protected] Abstract. To provide the precision required in industrial design, drawings need to offer the possibility of removing lines, which are hidden in a given projection. OpenCASCADE provides two algorithms

OpenGL基础图形编程

一.OpenGL与3D图形世界1.1.OpenGL使人们进入三维图形世界 我们生活在一个充满三维物体的三维世界中,为了使计算机能精确地再现这些物体,我们必须能在三维空间描绘这些物体.我们又生活在一个充满信息的世界中,能否尽快地理解并运用这些信息将直接影响事业的成败,所以我们需要用一种最直接的形式来表示这些信息. 最近几年计算机图形学的发展使得三维表现技术得以形成,这些三维表现技术使我们能够再现三维世界中的物体,能够用三维形体来表示复杂的信息,这种技术就是可视化(Visualization)技术.