維尼的蜂巢

RealTime??!! It’s amazing!!!!

SetSamplerState 十月 24, 2005

Filed under: DirectX — kevinlin @ 3:47 上午
 
 
IDirect3DDevice9::SetSamplerState Method
——————————————————————————–
設置紋理取樣器的狀態值。

語法:
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) );

 g_pd3dDevice->SetSamplerState( 0, D3DSAMP_MINFILTER, D3DTEXF_GAUSSIANQUAD );
    g_pd3dDevice->SetSamplerState( 0, D3DSAMP_MAGFILTER, D3DTEXF_GAUSSIANQUAD );
    g_pd3dDevice->SetSamplerState( 0, D3DSAMP_MIPMAPLODBIAS, 1 );
    g_pd3dDevice->SetSamplerState( 0, D3DSAMP_SRGBTEXTURE, 2 );
    g_pd3dDevice->SetSamplerState( 0, D3DSAMP_DMAPOFFSET, 2 );
}

 

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 變更 )

Twitter picture

You are commenting using your Twitter account. Log Out / 變更 )

Facebook照片

You are commenting using your Facebook account. Log Out / 變更 )

Google+ photo

You are commenting using your Google+ account. Log Out / 變更 )

連結到 %s