共用方式為


臉部和頂點法向量 (Direct3D 9)

網格中的每個臉部都有垂直單位法向量,如下圖所示。 向量的方向取決於頂點的定義順序,以及座標系統是右手還是左手。 臉部正常點遠離臉部的正面。 在 Direct3D 中,只有臉部的正面可見。 正面是頂點以順時針順序定義的頂點。

正面向量的 圖例

任何不是正面的臉部都是後臉。 Direct3D 不一定會轉譯後臉;因此,據說後臉被撲殺。 如有需要,您可以變更撲殺模式來轉譯後臉。 如需詳細資訊,請參閱 Culling State (Direct3D 9)

Direct3D 會針對 Gouraud 底紋、光源和紋理效果使用頂點單位法線。 下圖顯示一般範例。

頂點常態圖例

將 Gouraud 底紋套用至多邊形時,Direct3D 會使用頂點常態來計算光源與表面之間的角度。 它會計算頂點的色彩和強度值,並針對所有基本介面的每個點插補這些值。 Direct3D 會使用角度計算光線強度值。 角度越大,表面的光線就越少。

如果您要建立平面的物件,請將頂點法線設定為垂直於表面,如下圖所示。

平面圖例,由兩個三角形組成,具有頂點法線

不過,您的物件更有可能由三角形帶狀結構組成,而且三角形不是平面。 在帶狀中的所有三角形之間達成平滑底紋的一個簡單方式,就是先計算與頂點相關聯之每個多邊形面的表面法向量。 頂點常態可以設定為讓每個表面都相等的角度。 不過,此方法對於複雜基本類型而言可能不夠有效率。

下圖說明這個方法,其中顯示兩個表面,S1 和 S2 從上面看到邊緣。 S1 和 S2 的一般向量會以藍色顯示。 頂點常態向量會以紅色顯示。 頂點法向量使用S1表面法線所產生的角度,與頂點常態與S2表面法線之間的角度相同。 當這兩個表面以 Gouraud 底紋點亮和著色時,結果是兩者之間的平滑陰影、平滑圓角邊緣。

兩個表面(s1 和 s2)及其常態向量和頂點法向量 的圖表

如果頂點法向與其相關聯的其中一個臉部傾斜,它會導致該表面點的光線強度增加或減少,視它與光源所產生的角度而定。 下圖顯示範例。 同樣地,這些表面會以邊緣顯示。 頂點法向 S1 傾斜,使它與光源的角度比頂點常態與表面法線有相等的角度還要小。

兩個表面(s1 和 s2)的圖表,其頂點法向量傾向於一張臉部

您可以使用 Gouraud 底紋,在具有尖銳邊緣的 3D 場景中顯示某些物件。 若要這樣做,請在需要尖銳邊緣的任何臉部交集上複製頂點法向量,如下圖所示。

在尖銳邊緣 重複頂點法向量的圖例

如果您使用 DrawPrimitive 方法來轉譯場景,請將具有尖銳邊緣的物件定義為三角形清單,而不是三角形帶狀。 當您將物件定義為三角形帶狀結構時,Direct3D 會將它視為由多個三角形臉部組成的單一多邊形。 Gouraud 底紋會同時套用至多邊形的每個臉部,以及相鄰的臉部之間。 結果是一個物件,會從臉部到臉部順暢地遮蔽。 因為三角形清單是由一連串的三角形面組成的多邊形,Direct3D 會套用 Gouraud 陰影,並橫跨多邊形的每個臉部。 不過,不會從臉部套用。 如果三角形清單的兩個或多個三角形相鄰,它們之間似乎有尖銳的邊緣。

另一個替代方法是在呈現具有尖銳邊緣的物件時變更為平面底紋。 這是計算上最有效率的方法,但它可能會導致場景中的物件未以實際方式呈現為 Gouraud 陰影的物件。

座標系統和幾何