紋理包裝
紋理包裝會使用專為每個頂點指定的紋理座標,變更 Direct3D 將紋理多邊形點陣化的基本方式。 將多邊形點陣化時,系統會在每個多邊形頂點的紋理座標之間進行插補,以判斷應用於每個多邊形像素的紋理像素。 在正常的情況下,系統會將紋理視為 2D 平面,以使用紋理中 A 點到 B 點的最短路徑來插補新的紋理像素。如果 A 點代表 u、v 位置 (0.8, 0.1),而 B 點位於 (0.1,0.1),則補插的線條會如下圖所示。
請注意,在上圖中,A 和 B 之間的最短距離大致會通過紋理的中間位置。 啟用 u 紋理或 v 紋理座標包裝會變更 Direct3D 判斷 u 方向和 v 方向紋理座標之間最短路徑的方式。 根據定義,紋理包裝會導致轉譯器採用紋理座標集之間的最短路徑 (假設該 0.0 和 1.0 會疊合)。 最後一個位元為比較棘手的部分:想像一下,讓紋理包裝朝著同一方向,會導致系統將紋理視為包裝在圓柱體周圍。 舉例來說,讓我們來看看下圖。
上圖顯示 u 方向的包裝如何影響系統插補紋理座標的方式。 若將範例中相同的點使用在一般或非包裝紋理上,即可看到 A 點和 B 點之間的最短路徑將不再通過紋理中央;現在,該路徑會跨越 0.0 和 1.0 同時存在的框線。 在 v 方向的包裝也與之相似,差別在於:它會將紋理包裝在橫放圓柱體的周圍。 同時具備 u 方向和 v 方向的包裝則更加複雜。 在這個情況下,紋理就如同環面或環圈。
紋理包裝最常見的實用應用範疇,就是用來執行環境對應。 具有環境對應紋理的物件,看起來往往具有相當高的反射能力,能顯示場景物件周圍的鏡像影像。 在本討論中,請想像設有四面牆壁的房間,而每一面牆壁各自漆上字母 R、G、B、Y 和對應的色彩:紅色、綠色、藍色和黃色。 這個簡單房間的環境對應會如下圖所示。
想像一下,該房間的天花板會由反射能力良好的四方形柱子所支撐。 將環境對應紋理對應至柱子一點也不難;但讓柱子看起來正在反射字母和色彩,則絕非易事。 下圖顯示柱子的框線圖,當中將適用的紋理座標列於靠近最上方的頂點處。 包裝與紋理邊緣交會的接縫會以虛線顯示。
在 u 方向啟用包裝時,具有紋理的柱子會適當顯示來自環境對應的色彩和符號,在紋理前方的接縫處,轉譯器會適當選擇紋理座標之間的最短路徑,以假設 u 座標 0.0 和 1.0 共用相同的位置。 具有紋理的柱子看起來會如下圖所示。
若未啟用紋理包裝,轉譯器就不會朝著所需的方向進行插補,以產生可信的反射影像。 相較之下,柱子前方的區域將包含橫向壓縮的紋理像素,因為位於 u 座標 0.175 和 0.875 之間的紋理像素會通過紋理中心。 這樣一來,就無法產生包裝效果。
請勿將紋理包裝和名稱相似的紋理定址模式混為一談。 紋理包裝會在紋理定址前執行。 請務必確認紋理包裝資料並未包含位於 [0.0, 1.0] 範圍以外的任何紋理座標,因為這將產生未定義的結果。 如需紋理定址的詳細資訊,請參閱紋理定址模式。
位移對應包裝
位移對應會透過鑲嵌引擎進行插補。 由於您無法為鑲嵌引擎指定包裝模式,因此,紋理包裝無法搭配位移對應執行。 應用程式可以使用一組頂點,以強制插補透過任何方向進行包裝。 此外,應用程式也可將要完成的插補指定為簡單的線性插補。
相關主題