计算机图形学chap9消隐.ppt

上传人:苏美尔 文档编号:7198802 上传时间:2020-11-05 格式:PPT 页数:30 大小:572KB
返回 下载 相关 举报
计算机图形学chap9消隐.ppt_第1页
第1页 / 共30页
计算机图形学chap9消隐.ppt_第2页
第2页 / 共30页
计算机图形学chap9消隐.ppt_第3页
第3页 / 共30页
计算机图形学chap9消隐.ppt_第4页
第4页 / 共30页
计算机图形学chap9消隐.ppt_第5页
第5页 / 共30页
点击查看更多>>
资源描述

《计算机图形学chap9消隐.ppt》由会员分享,可在线阅读,更多相关《计算机图形学chap9消隐.ppt(30页珍藏版)》请在三一文库上搜索。

1、1,第九章 消隐,基本概念 深度缓存器算法 区间扫描线算法 深度排序算法 区域细分算法 光线投射算法 BSP树算法 多边形区域排序算法 OpenGL中的消隐,2,基本概念,物体的消隐或隐藏线面的消除:在给定视点和视线方向后,决定场景中哪些物体的表面是可见的,哪些是被遮挡不可见的。,3,基本概念,消隐算法按实现方式分类 图像空间消隐算法以屏幕像素为采样单位,确定投影于每一像素的可见景物表面区域,并将其颜色作为该像素的显示颜色。如深度缓冲器算法、A缓冲器算法、区间扫描线算法等。,4,基本概念,景物空间消隐算法直接在景物空间(观察坐标系)中确定视点不可见的表面区域,并将它们表达成同原表面一致的数据结

2、构。如BSP算法、多边形区域排序算法等。 介于二者之间的算法,如深度排序算法、区域细分算法、光线投射算法等。,5,基本概念,基本的原则 排序:各景物表面按照距离视点远近排序的结果,用于确定消隐对象之间的遮挡关系。 连贯性:连贯性是指所考察的物体或视区内的图像局部保持不变的一种性质,用于提高排序效率。,6,9.1 深度缓存器算法( Z-buffer),基本原理 帧缓存:保存各点的颜色。 Z缓存:保存屏幕坐标系上各象素点所对应的深度值。,7,深度缓存器算法( Z-buffer),图9.1 深度缓存器算法的原理,8,深度缓存器算法( Z-buffer),算法步骤 初始化:把Z缓存中各(x,y)单元置

3、为z的最小值,而帧缓存各(x,y)单元置为背景色。 在把物体表面相应的多边形扫描转换成帧缓存中的信息时,对于多边形内的每一采样点(x,y)进行处理:,9,深度缓存器算法( Z-buffer),计算采样点(x,y)的深度z(x,y); 如z(x,y)大于Z缓存中在(x,y)处的值,则把z(x,y)存入Z缓存中的(x,y)处,再把多边形在z(x,y)处的颜色值存入帧缓存的(x,y)地址中。,10,深度缓存器算法( Z-buffer),如何计算采样点(x,y)的深度z(x,y)。 假定多边形的平面方程为:Ax+By+Cz+D=0。,11,深度缓存器算法( Z-buffer),图9.2 利用扫描线的连

4、贯性加速深度的计算,12,深度缓存器算法( Z-buffer),扫描线上所有后继点的深度值: 当处理下一条扫描线y=y-1时,该扫描线上与多边形相交的最左边(x最小)交点的x值可以利用上一条扫描线上的最左边的x值计算:,13,深度缓存器算法( Z-buffer),扫描线深度缓存器算法,14,深度缓存器算法( Z-buffer),优点 简单 便于硬件实现 缺点 占用太多的存储单元 在实现反走样、透明和半透明等效果方面有困难,15,9.2 区间扫描线算法,避免对被遮挡区域的采样是进一步提高扫描线算法计算效率的关键。,图9.3 区间扫描线算法原理,16,区间扫描线算法,算法 三张表:边表、多边形表、

5、有效边表。 分割子区间,确定子区间上的唯一可见面。,图9.4 扫描线子区间,17,区间扫描线算法,特殊情形 贯穿情形:为了使算法能处理互相贯穿的多边形,扫描线上的分割点不仅应包含各多边形的边与扫描线的交点,而且应包含这些贯穿边界与扫描线的交点。,18,区间扫描线算法,循环遮挡:将多边形进行划分以消除循环遮挡。,图9.5 多边形贯穿和循环遮挡的情形,19,9.3 深度排序算法(画家算法),算法原理:算法约定距视点近的优先级高,距视点远的优先级低。生成图像时,优先级低的多边形先画,优先级高的多边形后画。这样,后画的多边形就会将先画的多边形遮挡住,从而达到消隐的效果。 算法的关键是多边形排序。,20

6、,9.4 区域细分算法,算法原理:考察投影平面上的一块区域,如果可以很“容易”地判断覆盖该区域中的哪个或哪些多边形是可见的,则可按这些多边形的光照属性和几何位置计算确定子区域内各像素的显示颜色;否则就将这块区域细分为若干较小的区域,并把上述推断原则递归地应用到每个较小的区域中去。,21,区域细分算法,多边形的分类,图9.6 多边形的投影与考察区域之间的关系,22,区域细分算法,可见性测试 所有多边形均是该区域的分离多边形,于是可直接将该区域中的所有像素点置为背景颜色。 针对该区域,仅存在一个相交多边形,或仅存在一个被包含多边形,或仅存在一个围绕多边形。则可先将该区域中的所有像素点置为背景颜色,

7、再将相应多边形的颜色值填入对应像素点的帧缓存中。,23,区域细分算法,针对该区域,有多于一个的相交多边形、被包含多边形或围绕多边形,则计算所有围绕的、相交的、以及被包含的多边形在该区域4个顶点处的z坐标,如果存在一个围绕多边性,它的4个z坐标比其它任何多边性的z坐标都大(最靠近视点),那么,可将该区域中的所有像素点置为该多边形的颜色值。,24,区域细分算法,图9.7 满足测试条件3的两个例子,25,9.5 光线投射算法,算法原理,图9.8 光线投射算法,26,光线投射算法,算法步骤 通过视点和投影平面(显示屏幕)上的所有像素点作一入射线,形成投影线。 将任一投影线与场景中的所有多边形求交。 若

8、有交点,则将所有交点按z值的大小进行排序,取出最近交点所属多边形的颜色;若没有交点,则取出背景的颜色。 将该射线穿过的像素点置为取出的颜色。,27,9.6 BSP树算法,算法原理,图9.9 BSP树算法原理,28,9.7 多边形区域排序算法,算法原理 将多边形按深度值由小到大排序,用前面的可见多边形去切割位于其后的多边形,使得最终每一个多边形要么是完全可见的,要么是完全不可见的。,29,9.8 OpenGL中的消隐,多边形剔除:主要用于去除多边形物体本身的不可见面,以提高图形系统的性能。 glEnable(GL_CULL_FACE); glCullFace (mode);,30,OpenGL中的消隐,深度测试: OpenGL中的深度测试是采用深度缓存器算法,消除场景中的不可见面。 glDepthRange (nearNormDepth, farNormalDepth); glClearDepth (maxDepth); glClear(GL_DEPTH_BUFFER_BIT); glDepthFunc(func);,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1