📜  背面检测方法

📅  最后修改于: 2021-04-23 20:00:21             🧑  作者: Mango

当我们在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)此方法只能用于建模为多边形网格的实体对象。