Direct3D 9 (效果狀態)
效果狀態可用來初始化管線狀態,以準備頂點和圖元處理。
effect state [ [index] ] = expression;
其中:
- 效果狀態 - 類似于傳統的固定函式管線狀態。 以下提供完整的狀態清單。
- [ [index] ] - 選擇性整數索引。 索引會識別效果狀態陣列內的特定狀態。 外部括弧表示索引是選擇性的。 如果使用索引,請務必使用內部括弧。
- 運算式 - 狀態指派運算式。 請參閱 Direct3D 9 (運算式) 。
每個狀態都有原生資料類型。 這是狀態預期值在指派值時會進入的資料類型。 每個狀態預期的資料類型如下所列。
請注意,效果介面會嘗試儘快將值轉換成適當的類型。 常值可以在編譯時期轉換。 非常值 (亦即呼叫適當的 Set 方法時,必須轉換) 一般變數。 例如,效果介面會視需要使用 SetBool、 SetValue和其他類似的函式來轉換值。 為了提升效能,請確定傳遞至效果介面的值已經是正確的類型,而且不需要轉型。 如果執行時間無法轉換值,則會傳回錯誤。
效果狀態可以分成下列類別:
淺色狀態
若要啟用套用效果的最佳效能,應該在效果檔案中指定光線或材質的所有元件。 無法宣告的狀態會設定為某些預設值,因為 Direct3D 無法個別設定光線狀態。
淺色狀態 | 類型 | 值 |
---|---|---|
LightAmbient[n] | float4 | 請參閱 D3DLIGHT9的環境成員。 |
LightAttenuation0[n] | FLOAT | 請參閱 D3DLIGHT9的衰減0 成員。 |
LightAttenuation1[n] | FLOAT | 請參閱 D3DLIGHT9的衰減1 成員。 |
LightAttenuation2[n] | FLOAT | 請參閱 D3DLIGHT9的衰減2 成員。 |
LightDiffuse[n] | float4 | 請參閱 D3DLIGHT9的擴散成員。 |
LightDirection[n] | float3 | 請參閱 D3DLIGHT9的 Direction 成員。 |
LightEnable[n] | bool | TRUE 或 FALSE。 請參閱 LightEnable 中的 bEnable引數。 |
LightFalloff[n] | FLOAT | D3DCOLORVALUE。 請參閱 D3DLIGHT9的 Falloff 成員。 |
LightPhi[n] | FLOAT | 請參閱 D3DLIGHT9的 Phi 成員。 |
LightPosition[n] | float3 | 請參閱 D3DLIGHT9的 Position 成員。 |
LightRange[n] | FLOAT | 請參閱 D3DLIGHT9的 Range 成員。 |
LightSpecular[n] | float4 | 請參閱 D3DLIGHT9的反射成員。 |
LightTheta[n] | FLOAT | 請參閱 D3DLIGHT9的 Theta 成員。 |
LightType[n] | dword | 與最多 n 個 D3DLIGHTTYPE 值陣列的值相同,不含D3DLIGHT_前置詞。 |
範例:
LightEnable[0] = TRUE;
LightType[0] = POINT;
LightPosition[0] = float3<10.0f, 1.0f, 23.0f>;
LightAmbient[0] = float4<0.7f, 0.0f, 0.0f, 1.0f>;
這會啟用光源,讓點光源成為類型、將光線位置設定為 float3 < 10.0f、1.0f、23.0f > ,並將環境色彩設定為 float4 < 0.7f、0.0f、0.0f、1.0f > 。
材料狀態
您無法宣告的狀態會設定為某些預設值,因為 Direct3D 無法個別設定材料狀態。
材料狀態 | 類型 | 值 |
---|---|---|
MaterialAmbient | float4 | 與Ambient相同的值 |
MaterialDiffuse | float4 | 與擴散相同的值 |
MaterialEmissive | float4 | 與Emissive相同的值 |
MaterialPower | FLOAT | 與Power相同的值 |
MaterialSpecular | float4 | 與反射相同的值 |
範例:
MaterialDiffuse = float4<0.7f, 0.0f, 0.0f, 1.0f>;
MaterialPower = 3.0f;
這會將擴散色彩設定為 float4 < 0.7f、0.0f、0.0f、1.0f > ,並讓材質 3.0f 的電源。
轉譯狀態
轉譯狀態有兩種類型:
圖元管道轉譯狀態
效果檔案轉譯狀態的名稱類似于固定函式管線狀態,通常移除前置詞。
轉譯狀態 | 類型 | 值 |
---|---|---|
AlphaBlendEnable | bool | 是非題。 與 D3DRENDERSTATETYPE中D3DRS_ALPHABLENDENABLE相同的值。 |
AlphaFunc | dword | 與 D3DCMPFUNC 相同的值,不含D3DCMP_前置詞。 請參閱D3DRS_ALPHAFUNC。 |
AlphaRef | dword | 與D3DRS_ALPHAREF相同的值。 |
AlphaTestEnable | dword | 是非題。 請參閱D3DRS_ALPHATESTENABLE。 |
BlendOp | dword | 與沒有D3DBLENDOP_前置詞 的 D3DBLENDOP 相同的值。 |
ColorWriteEnable | dword | RED、GREEN、BLUE 和 ALPHA 的位組合。 請參閱D3DRS_COLORWRITEENABLE。 |
DepthBias | FLOAT | 與D3DRS_DEPTHBIAS相同的值。 |
DestBlend | dword | 與不含D3DBLEND_前置詞 的 D3DBLEND 相同的值。 |
DitherEnable | bool | 是非題。 與D3DRS_DITHERENABLE相同的值。 |
FillMode | dword | 與沒有D3DFILL_前置詞 的 D3DFILLMODE 相同的值。 |
LastPixel | dword | 是非題。 請參閱D3DRS_LASTPIXEL。 |
ShadeMode | dword | 與 D3DSHADEMODE 相同的值,不含D3DSHADE_前置詞。 |
SlopeScaleDepthBias | FLOAT | 與D3DRS_SLOPESCALEDEPTHBIAS相同的值。 |
SrcBlend | dword | 與不含D3DBLEND_前置詞 的 D3DBLEND 相同的值。 |
SRGBWriteEnable | bool | 是非題。 與D3DRS_SRGBWRITEENABLE相同的值。 |
樣板Enable | bool | 是非題。 與D3DRS_STENCILENABLE相同的值。 |
樣板Fail | dword | 與不含D3DSTENCILCAP_前置詞 的 D3DSTENCILCAPS 相同的值。 請參閱D3DRS_STENCILFAIL。 |
樣板Func | dword | 與 D3DCMPFUNC 相同的值,不含D3DCMP_前置詞。 請參閱D3DRS_STENCILFUNC。 |
樣板Mask | dword | 與D3DRS_STENCILMASK相同的值。 |
StencilPass | dword | 與不含D3DSTENCILCAP_前置詞 的 D3DSTENCILCAPS 相同的值。 請參閱D3DRS_STENCILPASS。 |
StencilRef | int | 與D3DRS_STENCILREF相同的值。 |
StencilWriteMask | dword | 與D3DRS_STENCILWRITEMASK相同的值。 |
樣板ZFail | dword | 與不含D3DSTENCILCAP_前置詞 的 D3DSTENCILCAPS 相同的值。 請參閱D3DRS_STENCILZFAIL。 |
TextureFactor | dword | 與 D3DCOLOR相同的值。 與D3DRS_TEXTUREFACTOR相同的值。 |
Wrap0 - Wrap15 | dword | 值與D3DRS_WRAP0所使用的值相同。 有效值為:
|
ZEnable | dword | 與 D3DZBUFFERTYPE 相同的值,不含D3DZB_前置詞。 |
ZFunc | dword | 與 D3DCMPFUNC 相同的值,不含D3DCMP_前置詞。 請參閱D3DRS_ZFUNC。 |
ZWriteEnable | bool | 是非題。 請參閱D3DRS_ZWRITEENABLE。 |
範例:
AlphaBlendEnable = TRUE;
FillMode = WIREFRAME;
這會啟用 Alpha 混合,並讓所有幾何線上框中轉譯。
頂點管道轉譯狀態
效果檔案轉譯狀態的名稱類似于固定函式管線狀態,通常移除前置詞。
轉譯狀態 | 類型 | 值 |
---|---|---|
環境 | float4 | 與D3DRS_AMBIENT相同的值。 |
AmbientMaterialSource | dword | 與不含D3DMCS_前置詞 的 D3DMATERIALCOLORSOURCE 相同的值。 請參閱D3DRS_AMBIENTMATERIALSOURCE。 |
裁剪 | bool | 是非題。 與D3DRS_CLIPPING相同的值。 |
ClipPlaneEnable | dword | D3DCLIPPLANE0 - D3DCLIPPLANE5 宏的位組合。 請參閱 D3DCLIPPLANEn 和D3DRS_CLIPPLANEENABLE。 |
ColorVertex | bool | 是非題。 與D3DRS_COLORVERTEX相同的值。 |
CullMode | dword | 與沒有D3DCULL_前置詞 的 D3DCULL 相同的值。 |
DiffuseMaterialSource | dword | 與不含D3DMCS_前置詞 的 D3DMATERIALCOLORSOURCE 相同的值。 請參閱D3DRS_DIFFUSEMATERIALSOURCE。 |
EmissiveMaterialSource | dword | 與不含D3DMCS_前置詞 的 D3DMATERIALCOLORSOURCE 相同的值。 請參閱D3DRS_EMISSIVEMATERIALSOURCE。 |
FogColor | dword | 與 D3DCOLOR相同的值。 請參閱D3DRS_FOGCOLOR。 |
FogDensity | FLOAT | 與D3DRS_FOGDENSITY相同的值。 |
FogEnable | bool | 是非題。 與D3DRS_FOGENABLE相同的值。 |
FogEnd | FLOAT | 與D3DRS_FOGEND相同的值。 |
FogStart | FLOAT | 與D3DRS_FOGSTART相同的值。 |
FogTableMode | dword | 與 D3DFOGMODE相同的值。 請參閱 D3DRENDERSTATETYPE中的 D3DRS_FOGTABLEMODE。 |
FogVertexMode | dword | 與沒有D3DFOG_前置詞 的 D3DFOGMODE 相同的值。 |
IndexedVertexBlendEnable | bool | 是非題。 與D3DRS_INDEXEDVERTEXBLENDENABLE相同的值。 |
光源 | bool | 是非題。 與D3DRS_LIGHTING相同的值。 |
LocalViewer | bool | 是非題。 與D3DRS_LOCALVIEWER相同的值。 |
MultiSampleAntialias | bool | 與D3DRS_MULTISAMPLEANTIALIAS相同的值。 |
MultiSampleMask | dword | 與D3DRS_MULTISAMPLEMASK相同的值。 |
NormalizeNormals | bool | 是非題。 與D3DRS_NORMALIZENORMALS相同的值。 |
PatchSegments | FLOAT | 與 SetNPatchMode中的 nSegments 相同的值。 |
PointScale_A | FLOAT | 與D3DRS_POINTSCALE_A相同的值。 |
PointScale_B | FLOAT | 與D3DRS_POINTSCALE_B相同的值。 |
PointScale_C | FLOAT | 與D3DRS_POINTSCALE_C相同的值。 |
PointScaleEnable | bool | 與D3DRS_POINTSCALEENABLE相同的值。 |
PointSize | FLOAT | 與D3DRS_POINTSIZE相同的值。 |
PointSize_Min | FLOAT | 與D3DRS_POINTSIZE_MIN相同的值。 |
PointSize_Max | FLOAT | 與沒有D3DRS_前置詞的D3DRS_POINTSIZE_MAX值相同。 |
PointSpriteEnable | bool | 是非題。 與D3DRS_POINTSPRITEENABLE相同的值。 |
RangeFogEnable | bool | 是非題。 與D3DRS_RANGEFOGENABLE相同的值。 |
SpecularEnable | bool | 是非題。 與D3DRS_SPECULARENABLE相同的值。 |
SpecularMaterialSource | dword | 與不含D3DMCS_前置詞的 D3DMATERIALCOLORSOURCE 值相同。 請參閱D3DRS_SPECULARMATERIALSOURCE。 |
TweenFactor | FLOAT | 與D3DRS_TWEENFACTOR相同的值。 |
頂點Blend | dword | 與不含D3DVBF_前置詞 的 D3DVERTEXBLENDFLAGS 相同的值。 請參閱D3DRS_VERTEXBLEND。 |
範例:
Ambient = float4<0.7f, 0.0f, 0.0f, 1.0f>;
CullMode = CCW;
FogColor = 0xff0000;
這會讓環境色彩 float4 < 0.7f、0.0f、0.0f、1.0f > 、將後臺擷取模式設定為逆時針模式,並將濃度設定為紅色。
取樣器狀態
取樣器狀態代表取樣器物件。
狀態 | 類型 | 值 |
---|---|---|
取樣器 | 採樣 | Null或取樣器狀態欄塊。 |
取樣器階段狀態
取樣器階段狀態是用來取樣紋理。 取樣器狀態會決定篩選類型和紋理定址模式。
取樣器狀態 | 類型 | 值 |
---|---|---|
AddressU[16] | dword | 與 D3DTEXTUREADDRESS 的值相同,不含D3DTADDRESS_前置詞。 請參閱D3DSAMP_ADDRESSU。 |
AddressV[16] | dword | 與 D3DTEXTUREADDRESS 的值相同,不含D3DTADDRESS_前置詞。 請參閱D3DSAMP_ADDRESSV。 |
AddressW[16] | dword | 與 D3DTEXTUREADDRESS 的值相同,不含D3DTADDRESS_前置詞。 請參閱D3DSAMP_ADDRESSW。 |
BorderColor[16] | D3DCOLOR | 與不含D3DTEXF_前置詞 的 D3DTEXTUREFILTERTYPE 相同的值。 請參閱D3DSAMP_BORDERCOLOR。 |
MagFilter[16] | dword | 與不含D3DTEXF_前置詞 的 D3DTEXTUREFILTERTYPE 相同的值。 請參閱D3DSAMP_MAGFILTER。 |
MaxAnisotropy[16] | dword | 與沒有D3DSAMP_前置詞的D3DSAMP_MAXANISOTROPY值相同。 |
MaxMipLevel[16] | int | 與沒有D3DSAMP_前置詞的D3DSAMP_MAXMIPLEVEL值相同。 |
MinFilter[16] | dword | 與沒有D3DSAMP_前置詞D3DSAMP_MINFILTER相同的值。 |
MipFilter[16] | dword | 與沒有D3DSAMP_前置詞D3DSAMP_MIPFILTER相同的值。 |
MipMapLodBias[16] | FLOAT | 與沒有D3DSAMP_前置詞D3DSAMP_MIPMAPLODBIAS相同的值。 |
SRGBTexture | bool | 與沒有D3DSAMP_前置詞D3DSAMP_SRGBTEXTURE相同的值。 |
範例:
AddressU[0] = CLAMP;
AddressV[0] = CLAMP;
AddressW[0] = CLAMP;
這會限制介於 0 到 1 之間的 UVW 值。
著色器狀態
只有兩種效果著色器狀態:一個與頂點著色器物件相關聯,另一個與圖元著色器物件相關聯。
著色器狀態 | 類型 | 值 |
---|---|---|
PixelShader | pixelhader | Null、元件區塊、編譯目標或圖元著色器參數。 |
頂點Shader | 頂點hader | Null、元件區塊、編譯目標或圖元著色器參數。 |
範例:
VertexShader = compile vs_1_1 VSTexture();
PixelShader = NULL;
這會將稍早在 .fx 檔案中定義的頂點著色器編譯為頂點著色器 1.1 版,然後將編譯的著色器設定為頂點著色器。 圖元著色器會指派給 Null。
著色器常數狀態
著色器常數狀態可用來存取著色器常數參數。
著色器常數狀態 | 類型 | 值 |
---|---|---|
PixelShaderConstant | float[m[n]] | m x n 個浮點數陣列;m 和 n 是選擇性的。 |
PixelShaderConstant1 | float4 | 一個 4D 浮點數。 |
PixelShaderConstant2 | float4x2 | 兩個 4D 浮點數。 |
PixelShaderConstant3 | float4x3 | 三個 4D 浮點數。 |
PixelShaderConstant4 | float4x4 | 四個 4D 浮點數。 |
PixelShaderConstantB | bool[m[n]] | m x n 個 bools 陣列;m 和 n 是選擇性的。 |
PixelShaderConstantI | int[m[n]] | m x n ints 陣列。 m 和 n 是選擇性的。 |
PixelShaderConstantF | float[m[n]] | m x n 個浮點數陣列。 m 和 n 是選擇性的。 |
VertexShaderConstant | float[m[n]] | m x n 個浮點數陣列。 m 和 n 是選擇性的。 |
VertexShaderConstant1 | float4 | 一個 4D 浮點數。 |
VertexShaderConstant2 | float4x2 | 兩個 4D 浮點數。 |
VertexShaderConstant3 | float4x3 | 三個 4D 浮點數。 |
VertexShaderConstant4 | float4x4 | 四個 4D 浮點數。 |
VertexShaderConstantB | bool[m[n]] | m x n 個 bools 陣列。 m 和 n 是選擇性的。 |
VertexShaderConstantI | int[m[n]] | m x n ints 陣列。 m 和 n 是選擇性的。 |
VertexShaderConstantF | float[m[n]] | m x n 個浮點數陣列。 m 和 n 是選擇性的。 |
紋理狀態
紋理狀態會初始化多文本混合器所使用的紋理。
紋理狀態 | 類型 | 值 |
---|---|---|
紋理[8] | 紋理 | Null或紋理參數。 |
紋理階段狀態
紋理階段狀態會設定多文本混合器中的紋理和紋理階段。
紋理階段狀態 | 類型 | 值 |
---|---|---|
AlphaOp[8] | dword | 與沒有D3DTOP_前置詞的 D3DTEXTUREOP 相同。 請參閱D3DTSS_ALPHAOP。 |
AlphaArg0[8] | dword | 與不含 D3DTA_ 前置詞的 D3DTA 相同。 請參閱D3DTSS_ALPHAARG0。 |
AlphaArg1[8] | dword | 與不含 D3DTA_ 前置詞的 D3DTA 相同。 請參閱D3DTSS_ALPHAARG1。 |
AlphaArg2[8] | dword | 與不含 D3DTA_ 前置詞的 D3DTA 相同。 請參閱D3DTSS_ALPHAARG2。 |
ColorArg0[8] | dword | 與不含 D3DTA_ 前置詞的 D3DTA 相同。 請參閱D3DTSS_COLORARG0。 |
ColorArg1[8] | dword | 與不含 D3DTA_ 前置詞的 D3DTA 相同。 請參閱D3DTSS_COLORARG1。 |
ColorArg2[8] | dword | 與不含 D3DTA_ 前置詞的 D3DTA 相同。 請參閱D3DTSS_COLORARG2。 |
ColorOp[8] | dword | 與不含D3DTOP_前置詞的 D3DTEXTUREOP 相同。 請參閱D3DTSS_COLOROP。 |
BumpEnvLScale[8] | FLOAT | 與沒有D3DTSS_TCI前置詞D3DTSS_BUMPENVLSCALE相同的值。 |
BumpEnvLOffset[8] | FLOAT | 與沒有D3DTSS_TCI前置詞D3DTSS_BUMPENVLOFFSET相同的值。 |
BumpEnvMat00[8] | FLOAT | 與D3DTSS_BUMPENVMAT00相同的值。 |
BumpEnvMat01[8] | FLOAT | 與D3DTSS_BUMPENVMAT01相同的值。 |
BumpEnvMat10[8] | FLOAT | 與D3DTSS_BUMPENVMAT10相同的值。 |
BumpEnvMat11[8] | FLOAT | 與D3DTSS_BUMPENVMAT11相同的值。 |
ResultArg[8] | dword | 與不含 D3DTA_ 前置詞的 D3DTA 相同。 請參閱D3DTSS_RESULTARG。 |
TexCoordIndex[8] | dword | 與沒有D3DTSS_TCI前置詞D3DTSS_TEXCOORDINDEX相同的值。 |
TextureTransformFlags[8] | dword | 與不含D3DTTFF_前置詞 的 D3DTEXTURETRANSFORMFLAGS 值相同。 請參閱D3DTSS_TEXTURETRANSFORMFLAGS。 |
轉換狀態
設定轉換狀態以初始化轉換矩陣。 效果會使用轉置矩陣來提高效率。 您可以提供轉置矩陣給效果,或者效果會在使用矩陣之前自動轉置矩陣。
轉換狀態 | 類型 | 值 |
---|---|---|
ProjectionTransform | float4x4 | 浮點數的 4x4 矩陣。 與沒有D3DTS_前置詞D3DTS_PROJECTION相同的值。 |
TextureTransform[8] | float4x4 | 浮點數的 4x4 矩陣。 與 D3DTRANSFORMSTATETYPE 的值相同,不含D3DTS_前置詞。 |
ViewTransform | float4x4 | 浮點數的 4x4 矩陣。 與沒有D3DTS_前置詞D3DTS_VIEW相同的值。 |
WorldTransform | float4x4 | 浮點數的 4x4 矩陣。 |