紋理座標 (Direct3D 9)
大部分紋理,例如位圖,都是色彩值的二維陣列。 立方環境地圖紋理是例外狀況。 如需詳細資訊,請參閱 立方環境對應 (Direct3D 9)。 個別的色彩值稱為紋理元素或紋素。 每個材質在紋理中都有唯一的位址。 位址可以視為數據行和數據列編號,其會分別在下圖中標示為您和 v。
以數據行和數據列編號圖例
紋理座標位於紋理空間中。 也就是說,它們相對於紋理中的位置(0,0)。 當紋理套用至 3D 空間中的基本類型時,其材質地址必須對應至物件座標。 然後必須將它們轉譯成螢幕座標或圖元位置。
將紋素對應到螢幕空間
Direct3D 會將紋理空間中的材質直接對應到螢幕空間中的圖元,略過中繼步驟以提升效率。 此對應程序實際上是反向對應。 也就是說,針對螢幕空間中的每個圖元,會計算紋理空間中對應的紋素位置。 取樣該點前後的紋理色彩。 取樣程序稱為紋理篩選。 如需詳細資訊,請參閱 紋理篩選 (Direct3D 9)。
紋理中的每個紋素都可以由紋理座標指定。 不過,為了將紋素對應到基本類型,Direct3D 需要所有紋理中所有紋素的統一地址範圍。 因此,它會使用泛型尋址配置,其中所有紋素位址的範圍都是0.0到1.0。 Direct3D 應用程式會以您的角度指定紋理座標,v 值,就像以 x,y 座標來指定 2D 笛卡兒座標一樣。 就技術上而言,系統實際上可以處理介於 0.0 和 1.0 範圍內的紋理座標,並使用您為紋理尋址設定的參數來進行處理。 如需詳細資訊,請參閱 紋理尋址模式 (Direct3D 9)。
結果是相同的紋理位址可以對應到不同紋理中的不同材質座標。 在下圖中,紋理位址是 (0.5,1.0)。 不過,由於紋理的大小不同,紋理位址會對應到不同的材質。 左側紋理 1 是 5x5。 紋理位址 (0.5,1.0) 對應至紋素 (2,4)。 右側紋理 2 為 7x7。 紋理位址 (0.5,1.0) 對應至紋素 (3,6)。
下圖顯示簡化版本的紋素對應程式。 無可否認,這個範例非常簡單。 如需詳細資訊,請參閱 直接將紋素對應至圖元 (Direct3D 9)。
在此範例中,圖左方顯示的圖元會理想化為色彩的平方。 圖元四角的位址會對應到物件空間中的 3D 基本類型。 圖元的形狀通常會因為 3D 空間中基本類型的形狀以及檢視角度而扭曲。 與圖元角落相對應之基本型別介面區角落的邊角接著會對應到紋理空間。 對應程式會再次扭曲圖元的形狀,這是常見的。 像素的最終色彩值是從圖元所對應區域中的紋素計算而來。 當您設定紋理篩選方法時,您可以決定 Direct3D 用來到達圖元色彩的方法。 如需詳細資訊,請參閱 紋理篩選 (Direct3D 9)。
您的應用程式可以直接將紋理座標指派給頂點。 這項功能可讓您控制紋理的哪個部分對應到基本類型。 例如,假設您建立與下圖中紋理完全相同大小的矩形基本類型。 在此範例中,您希望您的應用程式將整個紋理對應到整個牆。 應用程式指派給基本類型頂點的紋理座標為 (0.0,0.0)、(1.0,0.0)、(1.0,1.0)和 (0.0,1.0)。
紋理對應牆
如果您決定將牆的高度減少一半,您可以將紋理扭曲成適合較小的牆,也可以指派紋理座標,讓 Direct3D 使用紋理的下半部。
如果您決定扭曲或縮放紋理以符合較小的牆體,您使用的紋理篩選方法會影響影像的品質。 如需詳細資訊,請參閱 紋理篩選 (Direct3D 9)。
相反地,如果您決定指派紋理座標,讓 Direct3D 使用較小牆的紋理下半部,則應用程式指派給本範例中基本類型的頂點的紋理座標為 (0.0,0.5)、(1.0,0.5)、(1.0,1.0)和 (0.0,1.0)。 Direct3D 會將紋理的下半部套用至牆面。
頂點的紋理座標可能大於 1.0。 當您將紋理座標指派給不在 0.0 到 1.0 範圍的頂點時,您也應該設定紋理尋址模式。 如需詳細資訊,請參閱 紋理尋址模式 (Direct3D 9)。
紋理座標和紋理階段
紋理座標會透過紋理階段與紋理相關聯。 使用 SetTexture(stageIndex, pTexture) 將紋理指派給紋理階段。 請參閱 IDirect3DDevice9::SetTexture。
彈性頂點格式(FVF) 程式代碼可以定義最多八組紋理座標。 紋理座標數據是由頂點數據中的使用者提供。 數據是以零起始的索引來參考:0 - 7。 最多有八個紋理混合階段。 紋理與使用 SetTexture 的特定階段相關聯(stageIndex,pTexture)。
完成此動作之後,任何階段都可以使用任何一組紋理座標。 每個座標集都與使用 SetTextureStageState 的階段相關聯(stageIndex、D3DTSS_TEXCOORDINDEX、textureCoordinateIndex )。 請參閱 IDirect3DDevice9::SetTextureStageState。 如此一來,混合階段就可以設定為使用任何紋理和任何紋理座標。 多個階段可以使用相同的紋理或紋理座標。
下列主題包含其他資訊。
相關主題