1.消隐原因:3D→2D后,深度信息丢失,引起图形二义性。
消隐: 要消除二义性,就必须在绘制时消除被遮挡的不可见的线或面。习惯上称作消除隐藏线和隐藏面,简称为消隐。
2.消隐对象:三维物体。
三维体的表示主要有:①边界表示(体、面、环、边、点);
②CSG表示(体素构造表示法)。
3.消隐结果与(观察物体)有关,也与(视点)有关。
4.消隐的分类
①按消隐对象分类:线消隐:不可见的边。
面消隐:不可见的面。
②按实现时所基于的坐标系不同分类:
1、景物空间(object space) 消隐算法
①直接在(世界坐标系)中确定视点不可见的表面区域
②将它们表达成同原表面一致的数据结构
③侧重于景中各物体之间的(几何关系)
2、图像空间(image space)消隐算法
①在(屏幕坐标系)上,以屏幕像素为采样单位,确定投影于每一像素的可见景物表面区域
②将其颜色作为该像素的显示光亮度
③侧重于向屏幕投影后形成的图像
5.多面体隐藏线消除:采取预先①消除自隐藏线、隐藏面;②深度测试;③包围盒测试;减少复杂运算。
①②在(投影前)进行,③在投影后,投影平面上线段和多边形求交之前进行的。
6.“朝前的面”:当视线与某个多边形内法向量夹角余弦大于0,则称这个多边形为“朝前的面”。
朝前的面是【潜在可见面】 可能完全可见,也可能被其他多边形遮挡成为部分可见,或者完全隐藏。
7.“朝后的面”:当余弦角小于0时,则这个多边形被成为“朝后的面”。
朝后的面是【自隐藏面】 因为物体表面是封闭的。朝后的面总是被朝前的面遮挡,始终是不可见的。
8.“自隐藏线”:两个自隐藏面的交线为“自隐藏线”。
9.在多面体的消隐过程中,无须对“自隐藏面”、“自隐藏线”进行求交、判别,因为它们始终是不可见的。因此只需要对“潜在可见面”的边进行隐藏性判别即可。
10.深度测试两步骤: ①粗略测试;( Zmax≤Zmin,多边形完全在线段之后,线段完全可见,无需对线段和多边形的遮挡关系进行进一步判断;
Zmax>Zmin,线段仍有可能完全位于多边形之前。采用精确测试予以判断。)
②精确测试。( 从线段两端P1(x1,y1,z1)和P2(x2,y2,z2)各做一条与Z轴平行的直线,与多边形所在平面分别交于M1(x1,y1,z1')和M2(x2,y2,z2');
若z1'≤z1且z2'≤z2,则多边形不会对线段有任何遮挡,线段完全可见。无需对遮挡关系进行进一步判断;
否则,将线段和多边形投影到投影平面上,进行线段和多边形求交等诸多运算最终确定被多边形隐藏)
11.包围盒测试: 线段或多边形的(包围盒)是包含它们,边平行于投影平面坐标轴的最小矩形。
比较线的包围盒和面的包围盒的四个参数,确定关系。
12.多面体隐藏线消除算法综合(详见P146)
①Hidden_line_removal() {
消除自隐藏面、线,得到潜在可见面、线段集合。
②对每一个潜在可见多边形 {
用深度测试探查每一条潜在可见线段是否被遮挡;
③将可能被遮挡的线段和多边形进行投影 {
采用包围盒测试探查投影后的线段和多边形关系。
④最后,对于实际可见线段求出可见区间。
} } }
13.Z缓冲器消隐算法也称“深度缓冲器消隐算法”。
基本思想:①将投影到显示屏上的每一个象素所对应的多边形表面的(深度)进行比较;
②取最靠近视点的表面的属性值作为该像素的属性值
用(Z缓冲区)记录该表面在该像素点的(深度)。
用(帧缓冲区)记录该表面在该像素点的(颜色或亮度值)。
14.Z缓冲器算法优点:
①简单:在象素级上以近物代替远物,易于消除隐藏面,并准确显示复杂曲面之间的交线。
②:计算量呈线性复杂度:场景中景物表面采样点的数目
③无需对各景物表面片作深度预排序:景物表面上的可见点可按任意次序写入深度缓冲器和帧缓冲器
④易于硬件实现:图形工作站上配置由硬件实现的深度缓冲器算法
很多微型机上都装有基于深度缓冲器算法的图形加速卡
15.Z缓冲器算法缺点:
①需要很大的存储空间
象素数目为500×500,深度值采用浮点类型(4字节)
除刷新缓存外,还需500*500*4=1M字节的额外存储空间
②在实现反走样、处理透明和半透明等效果方面存在困难,并由此会产生巨大的处理时间开销
由于在帧缓冲器内的同一象素点上可见表面的写入顺序是不确定的,所以可能导致画面上的局部错误。(发生在有表面深度相同的情况下)