Direct3D 9 (效果狀態)

效果狀態可用來初始化管線狀態,以準備頂點和圖元處理。

effect state [ [index] ] = expression;

其中:

  • 效果狀態 - 類似于傳統的固定函式管線狀態。 以下提供完整的狀態清單。
  • [ [index] ] - 選擇性整數索引。 索引會識別效果狀態陣列內的特定狀態。 外部括弧表示索引是選擇性的。 如果使用索引,請務必使用內部括弧。
  • 運算式 - 狀態指派運算式。 請參閱 Direct3D 9 (運算式)

每個狀態都有原生資料類型。 這是狀態預期值在指派值時會進入的資料類型。 每個狀態預期的資料類型如下所列。

請注意,效果介面會嘗試儘快將值轉換成適當的類型。 常值可以在編譯時期轉換。 非常值 (亦即呼叫適當的 Set 方法時,必須轉換) 一般變數。 例如,效果介面會視需要使用 SetBoolSetValue和其他類似的函式來轉換值。 為了提升效能,請確定傳遞至效果介面的值已經是正確的類型,而且不需要轉型。 如果執行時間無法轉換值,則會傳回錯誤。

效果狀態可以分成下列類別:

淺色狀態

若要啟用套用效果的最佳效能,應該在效果檔案中指定光線或材質的所有元件。 無法宣告的狀態會設定為某些預設值,因為 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 TRUEFALSE。 請參閱 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所使用的值相同。 有效值為:
  • COORD0 對應至D3DWRAPCOORD_0) 的 COORD0 (
  • COORD1 對應至D3DWRAPCOORD_1) 的 COORD1 (
  • COORD2 (對應至D3DWRAPCOORD_2)
  • COORD3 (對應至D3DWRAPCOORD_3)
  • 對應至D3DWRAP_U) 的 U (
  • 對應至D3DWRAP_V) 的 V (
  • 對應至D3DWRAP_W) 的 W (
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 矩陣。

 

效果格式