設置紋理取樣器的狀態值。
語法:
HRESULT SetSamplerState(
DWORD Sampler, // 取樣器編號,如果只有一張這邊設0
D3DSAMPLERSTATETYPE Type, // 取樣器狀態類型
DWORD Value // 取樣器狀態所對應的值
);
——————————————————————————–
其中的 Type 在 D3DSAMPLERSTATETYPE 中列舉:
D3DSAMPLERSTATETYPE Enumerated Type
——————————————————————————–
sampler的狀態定義紋理的sample(取樣)操作,例如紋理定位和紋理過濾。一部分取樣器狀態配置頂點處理,一部分配置像素處理。取樣器狀態可以通過狀態塊保存和恢復。
語法:
typedef enum _D3DSAMPLERSTATETYPE {
D3DSAMP_ADDRESSU = 1, // 紋理坐標定位 U
D3DSAMP_ADDRESSV = 2, // 紋理坐標定位 V
D3DSAMP_ADDRESSW = 3, // 紋理坐標定位 W
D3DSAMP_BORDERCOLOR = 4, // 邊框顏色
D3DSAMP_MAGFILTER = 5, // 放大過濾類型
D3DSAMP_MINFILTER = 6, // 縮小過濾類型
D3DSAMP_MIPFILTER = 7, // 多紋理過濾類型
D3DSAMP_MIPMAPLODBIAS = 8, // 多紋理層次細節指數
D3DSAMP_MAXMIPLEVEL = 9, // 最大多紋理層次
D3DSAMP_MAXANISOTROPY = 10, // 最大各向異性指數
D3DSAMP_SRGBTEXTURE = 11, // 伽瑪校正係數
D3DSAMP_ELEMENTINDEX = 12, // 多元素紋理元素索引
D3DSAMP_DMAPOFFSET = 13, // 位移貼圖偏移
D3DSAMP_FORCE_DWORD = 0x7fffffff //
} D3DSAMPLERSTATETYPE;
——————————————————————————–
其中,
D3DSAMP_ADDRESSU = 1, // 紋理坐標定位 U
D3DSAMP_ADDRESSV = 2, // 紋理坐標定位 V
D3DSAMP_ADDRESSW = 3, // 紋理坐標定位 W
這三個狀態的類型(Type)在 D3DTEXTUREADDRESS 中列舉:
D3DTEXTUREADDRESS Enumerated Type
——————————————————————————–
定義常量,用於描述支持的紋理定位模式。
語法:
typedef enum _D3DTEXTUREADDRESS {
D3DTADDRESS_WRAP = 1, // 覆蓋:重複鋪滿整個表面
D3DTADDRESS_MIRROR = 2, // 鏡像:單行(列)與雙行(列)鏡像對稱
D3DTADDRESS_CLAMP = 3, // 剪裁:UV超出[0,1]範圍之外的設為黑色
D3DTADDRESS_BORDER = 4, // 邊框: UV超出[0,1]範圍之外的設為邊框色
D3DTADDRESS_MIRRORONCE = 5, // 鏡像一次:僅作一次鏡像對稱,
// 範圍之外設為黑色
D3DTADDRESS_FORCE_DWORD = 0x7fffffff //
} D3DTEXTUREADDRESS;
——————————————————————————–
D3DSAMP_MAGFILTER = 5, // 放大過濾類型
D3DSAMP_MINFILTER = 6, // 縮小過濾類型
D3DSAMP_MIPFILTER = 7, // 多紋理過濾類型
這三個狀態的類型(Type)在 D3DTEXTUREFILTERTYPE 中列舉:
D3DTEXTUREFILTERTYPE Enumerated Type
——————————————————————————–
定義紋理過濾器模式。
語法:
typedef enum _D3DTEXTUREFILTERTYPE {
D3DTEXF_NONE = 0, // 無
D3DTEXF_POINT = 1, // 點過濾
D3DTEXF_LINEAR = 2, // 線性過濾
D3DTEXF_ANISOTROPIC = 3, // 各向異性過濾
D3DTEXF_PYRAMIDALQUAD = 6, // 錐體四次過濾
D3DTEXF_GAUSSIANQUAD = 7, // 高斯四次過濾
D3DTEXF_FORCE_DWORD = 0x7fffffff //
} D3DTEXTUREFILTERTYPE;
——————————————————————————–
下面提供一個範例片段,你可以在其中的 void loadTexture( void ) 函數體內嘗試各種不同的 SetSamplerState 參數,觀察各自效果的差別。
範例程式碼片斷:
void loadTexture( void )
{
D3DXCreateTextureFromFile( g_pd3dDevice, 『test.bmp』, &g_pTexture );
g_pd3dDevice->SetSamplerState( 0, D3DSAMP_ADDRESSU, D3DTADDRESS_BORDER );
g_pd3dDevice->SetSamplerState( 0, D3DSAMP_BORDERCOLOR, D3DCOLOR_COLORVALUE(0.5f,0.4f,0.3f,0.5f) );