又称隐藏面消除算法
目的是判断给定的观察位置,场景的内容可见性
分为物空间和像空间算法
像空间算法的基本思路是在投影平面上判断每个像素值对应的可见面。
物空间算法则是判断场景中的各个对象和对象各个组成部件中哪些平面是可见的。
后向面判别back face——物空间算法
右手坐标系中:
假设场景中的点(x,y,z)
Ax+By+Cz+D<0
则改点在多边形面的后面,ABCD是多边形面的平面参数。
简化:
视线向量Vview,平面法向量N
Vview·N>0
即两个向量的模乘以夹角的余弦值。
则该平面为后向面。
再次简化:
转化为投影坐标后,观察坐标系平行于视线向量的z轴,所以我们只需要判断平面法向量的z分量是否小于等于0即可。=0时,平面与视线相切,我们也观察不到。
如果是凸多面体,则它的平面都是属于完全可见或完全不可见;
如果是凹多面体,它的平面可以部分可见或不可见,需要进一步进行判断。
深度缓存算法 depth-buffer method——像空间算法
遍历每个像素位置,比较所有面的深度,对物体的每个面进行单独的处理。
通常运用在只包含多边形的场景中,在规范化坐标中实现。
算法实现:
需要两块缓存区域,深度缓存存储深度值,刷新缓存/帧缓存存储颜色值。
1.初始化缓存
depthBuff(x,y)=1.0;
frameBuff(x,y)=backgndColor;
2.处理场景中的每个多边形,每次一个。
-计算场景中平面各点的深度值
-如果z<depthBuff(x,y),则
depthBuff(x,y)=z;
frameBuff(x,y)=surfColor(x,y);