背面檢測方法
程式語言用於許多目的,例如製作網站、開發移動應用程式等。圖形設計是我們可以使用程式語言完成的事情之一。在進行圖形設計時,我們可能會遇到一個問題,即需要將 3D 物件投影到 2D 平面上,這會導致一個維度減少或一個面被隱藏。在這個問題中,我們需要檢測那個隱藏的面。
背面檢測也稱為平面方程方法,它是物件空間方法中的一種方法,其中將物件或給定物件的各個部分相互比較,以查詢如果將 3D 物件投射到 2D 表面,則哪些表面是可見的。
假設我們有一個稜柱,它由三個三角形面組成,其中一個面不可見。我們將針對稜柱的當前面,該面可能對使用者不可見,如果當前面對使用者不可見,則我們將跳過它或將其丟棄並移動到下一個面。
每個平面都有一個法向量,如果當前平面的法向量指向投影中心的外部,則該面對使用者不可見,否則對使用者可見。
三維繫統
在三維繫統中,我們有三個維度,例如 x、y 和 z 維度。我們假設 x 和 y 維度是我們的最終二維,而 z 維度是將被減少的第三維度。
z 維度可以以兩種方式假設,第一種是它向內或左手系移動,或者它從 2D 平面向外移動,它是右手系。對於這兩種系統,演算法將有所不同。讓我們逐一檢視這兩個維度 -
左手系演算法
對於左手系,步驟如下 -
首先,我們將獲取給定物件的每個面的法向量 N。
然後,我們將計算它與中心 C 的法向量的點積。
如果 Z 分量小於零,則當前面是背面,無需繪製它。
否則,當前面將可見,我們將繪製它。
從以上步驟可以得出結論,對於右手系,背面檢測方法非常簡單。如果給定向量的 z 分量大於零,則當前面是前面,否則是背面。
右手系演算法
對於左手系,步驟如下 -
首先,我們將獲取給定物件的每個面的法向量 N。
然後,我們將計算它與中心 C 的法向量的點積。
如果 Z 分量小於零,則當前面是背面,無需繪製它。
否則,當前面將可見,我們將繪製它。
從以上步驟可以得出結論,對於右手系,背面檢測方法非常簡單。如果給定向量的 z 分量大於零,則當前面是前面,否則是背面。
示例
例如,我們有一個多邊形,並且面的特定點具有座標 (A、B、C) 或法向量在其內包含這些變數。此外,從多邊形的方程我們可以得到 -
Ax + By + Cz + D < 0
其中,D 是一個常數。
當前面的法向量是
N = (A, B, C)
如果我們有 V.N < 0,則當前面是前面。這相當於背面方程為 -
(0, 0, -1).N > 0 Or C < 0
這裡 V 是表面向量。
當前方法的侷限性
上述方法在大多數情況下都能正常工作,但給定方法有一些侷限性 -
對於凹多面體,此方法可能無法正常工作,但對於凸多面體,此方法始終有效。
上面給出的方法僅適用於實體物件,而不適用於例如多邊形網格的建模物件。
結論
在本教程中,我們學習了一種在將 3D 物件投射到 2D 平面上時檢測背面的方法。對於左手系,背面檢測方法非常簡單。如果給定向量的 z 分量小於零,則當前面是前面。如果給定向量的 z 分量大於零,則當前面是前面,否則是背面。