(Direct3D 9) 的球面環境對應
球面環境地圖或球體地圖是特殊紋理,其中包含物件周圍場景的影像,或物件周圍的光源效果。 不同于立方環境對應,球體對應不會直接代表物件的周圍。 環境對應 (Direct3D 9 中的teapot 影像) 主題顯示您可以使用球體對應達成的反映效果。 球形圖是物件周圍場景完整 360 度檢視的 2D 標記法,如同透過魚眼鏡頭拍攝,如下圖所示。
球面環境地圖的紋理座標
您為每個接收環境對應的頂點指定的紋理座標,應該將紋理視為表面曲線所建立反射失真的函式。 應用程式必須計算每個頂點的這些紋理座標,才能達到所需的效果。 產生紋理座標的一個簡單且有效方式,會使用頂點標準作為輸入。 雖然有數種方法存在,但下列方程式在使用球體對應執行環境對應的應用程式之間很常見。
在這些公式中,您和 v 是正在計算的紋理座標,而 NX 和 NY 是相機空間頂點法線的 x 和 y 元件。 公式很簡單,但有效。 如果一般具有正 x 元件,則正數點位於右邊,而 u 座標會調整以適當地處理紋理。 同樣地,v 座標:正 y 表示正常點向上。 相反地,對於每個元件中的負值而言是相反的。
如果直接在相機的一般點,產生的座標應該不會失真。 這兩個座標的 +0.5 偏差會將零失真點放在球體地圖的中心,而頂點一般 (0, 0, z) 表示這個點。 此公式不會考慮一般 z 元件,但使用公式的應用程式可以略過具有正 z 元素的一般頂點來優化計算。 這適用于平面著色的物件,因為在相機空間中,如果一般距離相機 (正 z) ,則會在轉譯物件時擷取頂點。 針對 Gouraud 著色的物件,一般可以指向相機 (正 x) ,而且仍可看見包含頂點的三角形。 如果您未計算此頂點的 和 v,仍可能會使用臉部,因而產生非預期的行為。
套用球面環境對應
您可以使用 IDirect3DDevice9::SetTexture 方法,將紋理設定為適當的紋理階段,以與任何其他紋理相同的方式將環境對應套用至物件。 將第一個參數設定為所需紋理階段的索引,並將第二個參數設定為您建立環境對應紋理時所傳回的 IDirect3DDevice9 介面位址。 您可以視需要設定色彩和 Alpha 混合作業和引數,以達到所需的紋理混合效果。
相關主題