当我们在2-D屏幕上投影3-D对象时,我们需要检测2D上隐藏的面。
背面检测(也称为“平面方程”方法)是一种对象空间方法,在该方法中,将对象和对象的一部分进行比较以找出可见的表面。让我们考虑一个需要确定其可见性的三角形曲面。这个想法是要检查三角形是否会背对观察者。如果这样做,则将其丢弃到当前帧并移至下一帧。每个表面都有一个法线向量。如果此法向矢量指向投影中心的方向,则它是一个正面并且可以被观察者看到。如果此法向矢量指向远离投影中心的方向,则它是背面,观察者无法看到。
左手系统的算法:
1) Compute N for every face of object.
2) If (C.(Z component) > 0)
then a back face and don't draw
else
front face and draw
背面检测方法非常简单。对于左撇子系统,如果法线向量的Z分量为正,则为背面。如果向量的Z分量为负,则为正面。
右手系统的算法:
1) Compute N for every face of object.
2) If (C.(Z component) < 0)
then a back face and don't draw
else
front face and draw
因此,对于惯用右手的系统,如果法线向量的Z分量为负,则它为背面。如果向量的Z分量为正,则为正面。
背面检测可以识别场景中包含非重叠凸多面体的所有隐藏表面。
回顾多边形表面方程:
Ax + By + Cz + D < 0
在确定表面是背面还是正面时,还应考虑观察方向。表面的法线由下式给出:
N = (A, B, C)
如果V view .N> 0,则多边形是背面。但是应记住,在应用视图变换后,观察者正在向下看Z轴负向。因此,如果满足以下条件,则多边形为背面:
(0, 0, -1).N > 0
or if C < 0
Viewer也将无法看到C = 0的曲面,因此,如果C <= 0,则将多边形曲面标识为背面。
考虑到(a),
V.N = |V||N|Cos(angle)
if 0 <= angle 0 and V.N > 0
Hence, Back-face.
考虑到(b),
V.N = |V||N|Cos(angle)
if 90 < angle <= 180, then
cos(angle) < 0 and V.N < 0
Hence, Front-face.
局限性:
1)此方法对凸多面体有效,但对凹面多面体不一定有效。
2)此方法只能用于建模为多边形网格的实体对象。