可见面判别算法分为两种类型, 称为物空间算法和像空间算法。物空间算法将场景中的各对象和对象的各个组成部件相互进行比较,从而最终判别出哪些面是可见的; 而像空间算法则在投影平面上逐点判断各像素所对应的可见面。
后向面判别
快速简便的判别多面体后向面,设点(x, y, z)满足:
Ax + By + Cz + D < 0
则该点在多边形面的后面,A、B、C、D是多边形面的平面参数。
可以通过考察多边形面的法向量
N的方向来简化后向面测试,
Vview为下图左所示由相机位置出发的观察向量,则当
Vview ●
N > 0 时,该多边形为后向面。然后,如果将对象描述转换到投影坐标系后,观察方向平行于观察坐标系中的Zv轴,这时候仅需考虑
N在Z轴上的z分量即可。
在沿着Zv轴反向观察的右手观察系统中(上图右),若法向量
N的z分量C 满足
C < 0,则该多边形为一个后向面。同时,我们无法观察到法向量的z分量
C = 0的所有多边形面,
因为观察方向与该面相切。 因此,一旦某多边形面的法向量的z分量值:
C <= 0, 即可判定其为一个后向面。 如果采用的是左手坐标系, 以上方法同样适用,平面参数A、B、C、D可由顺时针方向标识的多边形顶点坐标计算出来(右手坐标系中为逆时针方向),同样的,如果观察方向与z轴正向一致,则后向面的法向量为远离试点的方向,由
C >= 0来进行判别。
深度缓存算法(Z-Buffer算法)
该算法沿着观察系统的z轴来计算各对象距离观察平面的深度,在这个算法里,不仅需要有帧缓冲区来存放每个像素的亮度值, 还需要有一个Z缓冲区来存放每个像素的深度值,算法的大概流程是 :
帧缓冲区置为背景色;
Z缓冲区置为最小Z值;
for (各个多边形)
{
扫面转换该多边形;
for (多边形所覆盖的每个像素(x, y) )