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.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。 如此一來,混合階段就可以設定為使用任何紋理和任何紋理座標。 多個階段可以使用相同的紋理或紋理座標。

其他資訊包含在下列主題中。

Direct3D 紋理