共用方式為


效果狀態 (Direct3D 9)

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

effect state [ [index] ] = expression;

哪裡:

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

每個狀態都有原生數據類型。 這是當效果指派值時,狀態預期值會進入的數據類型。 每個狀態預期的數據類型如下所列。

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

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

淺色狀態

若要啟用套用效果的最佳效能,效果檔案中應指定光線或材質的所有元件。 無法宣告的狀態會設定為某些預設值,因為 Direct3D 無法個別設定光線狀態。

淺色狀態 類型
LightAmbient[n] float4 請參閱 D3DLIGHT9的環境成員。
LightAttenuation0[n] 請參閱 D3DLIGHT9的衰減0 成員。
LightAttenuation1[n] 請參閱 D3DLIGHT9的衰減1 成員。
LightAttenuation2[n] 請參閱 D3DLIGHT9的衰減2 成員。
LightDiffuse[n] float4 請參閱 D3DLIGHT9的擴散成員。
LightDirection[n] float3 請參閱 D3DLIGHT9的 Direction 成員。
LightEnable[n] bool TRUEFALSE。 請參閱 LightEnable中的 bEnable 自變數。
LightFalloff[n] D3DCOLORVALUE。 請參閱 D3DLIGHT9的 Falloff 成員。
LightPhi[n] 請參閱 D3DLIGHT9的 Phi 成員。
LightPosition[n] float3 請參閱 D3DLIGHT9的位置成員。
LightRange[n] 請參閱 D3DLIGHT9的 Range 成員。
LightSpecular[n] float4 請參閱 D3DLIGHT9的反射成員。
LightTheta[n] 請參閱 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、0.0f、1.0f>。

材料狀態

您無法宣告的狀態會設定為某些預設值,因為 Direct3D 無法個別設定材質狀態。

材質狀態 類型
MaterialAmbient float4 與環境 相同的值
MaterialDiffuse float4 擴散 相同的值
MaterialEmissive float4 Emissive 相同的值
MaterialPower 與 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 True 或 False。 與 D3DRENDERSTATETYPE中的D3DRS_ALPHABLENDENABLE值相同。
AlphaFunc dword 與不含D3DCMP_前置詞的 D3DCMPFUNC 值相同。 請參閱D3DRS_ALPHAFUNC。
AlphaRef dword 與D3DRS_ALPHAREF相同的值。
AlphaTestEnable dword True 或 False。 請參閱D3DRS_ALPHATESTENABLE。
BlendOp dword 與不含D3DBLENDOP_前置詞的 D3DBLENDOP 值相同。
ColorWriteEnable dword RED、GREEN、BLUE 和 ALPHA 的位組合。 請參閱D3DRS_COLORWRITEENABLE。
DepthBias 與D3DRS_DEPTHBIAS相同的值。
DestBlend dword 與不含D3DBLEND_前置詞 D3DBLEND 相同的值。
DitherEnable bool True 或 False。 與D3DRS_DITHERENABLE相同的值。
FillMode dword 與不含D3DFILL_前置詞 D3DFILLMODE 相同的值。
LastPixel dword True 或 False。 請參閱D3DRS_LASTPIXEL。
ShadeMode dword 與不含D3DSHADE_前置詞 D3DSHADEMODE 相同的值。
SlopeScaleDepthBias 與D3DRS_SLOPESCALEDEPTHBIAS相同的值。
SrcBlend dword 與不含D3DBLEND_前置詞 D3DBLEND 相同的值。
SRGBWriteEnable bool True 或 False。 與D3DRS_SRGBWRITEENABLE相同的值。
StencilEnable bool True 或 False。 與D3DRS_STENCILENABLE相同的值。
樣板Fail dword 與不含D3DSTENCILCAP_前置詞的 D3DSTENCILCAPS 值相同。 請參閱D3DRS_STENCILFAIL。
樣板Func dword 與不含D3DCMP_前置詞的 D3DCMPFUNC 值相同。 請參閱D3DRS_STENCILFUNC。
樣板Mask dword 與D3DRS_STENCILMASK相同的值。
StencilPass dword 與不含D3DSTENCILCAP_前置詞的 D3DSTENCILCAPS 值相同。 請參閱D3DRS_STENCILPASS。
StencilRef int 與D3DRS_STENCILREF相同的值。
StencilWriteMask dword 與D3DRS_STENCILWRITEMASK相同的值。
StencilZFail dword 與不含D3DSTENCILCAP_前置詞的 D3DSTENCILCAPS 值相同。 請參閱D3DRS_STENCILZFAIL。
TextureFactor dword D3DCOLOR相同的值。 與D3DRS_TEXTUREFACTOR相同的值。
Wrap0 - Wrap15 dword 值與D3DRS_WRAP0所使用的值相同。 有效值為:
  • COORD0 (對應至D3DWRAPCOORD_0)
  • COORD1 (對應至D3DWRAPCOORD_1)
  • COORD2 (對應至D3DWRAPCOORD_2)
  • COORD3 (對應至D3DWRAPCOORD_3)
  • U (對應至D3DWRAP_U)
  • V (對應至D3DWRAP_V)
  • W (對應至D3DWRAP_W)
ZEnable dword 與不含D3DZB_前置詞 D3DZBUFFERTYPE 相同的值。
ZFunc dword 與不含D3DCMP_前置詞的 D3DCMPFUNC 值相同。 請參閱D3DRS_ZFUNC。
ZWriteEnable bool True 或 False。 請參閱D3DRS_ZWRITEENABLE。

例:

AlphaBlendEnable = TRUE;
FillMode = WIREFRAME;

這會啟用 Alpha 混合,並讓所有幾何在線框中轉譯。

頂點管道轉譯狀態

效果檔案轉譯狀態的名稱類似於固定函式管線狀態,通常會移除前置詞。

轉譯狀態 類型
氛圍 float4 與D3DRS_AMBIENT相同的值。
AmbientMaterialSource dword 與不含D3DMCS_前置詞的 D3DMATERIALCOLORSOURCE 值相同。 請參閱D3DRS_AMBIENTMATERIALSOURCE。
裁剪 bool True 或 False。 與D3DRS_CLIPPING相同的值。
ClipPlaneEnable dword D3DCLIPPLANE0的位組合 - D3DCLIPPLANE5巨集。 請參閱 D3DCLIPPLANEn 和 D3DRS_CLIPPLANEENABLE。
ColorVertex bool True 或 False。 與D3DRS_COLORVERTEX相同的值。
CullMode dword 與不含D3DCULL_前置詞 D3DCULL 相同的值。
DiffuseMaterialSource dword 與不含D3DMCS_前置詞的 D3DMATERIALCOLORSOURCE 值相同。 請參閱D3DRS_DIFFUSEMATERIALSOURCE。
EmissiveMaterialSource dword 與不含D3DMCS_前置詞的 D3DMATERIALCOLORSOURCE 值相同。 請參閱D3DRS_EMISSIVEMATERIALSOURCE。
FogColor dword D3DCOLOR相同的值。 請參閱D3DRS_FOGCOLOR。
FogDensity 與D3DRS_FOGDENSITY相同的值。
FogEnable bool True 或 False。 與D3DRS_FOGENABLE相同的值。
FogEnd 與D3DRS_FOGEND相同的值。
FogStart 與D3DRS_FOGSTART相同的值。
FogTableMode dword D3DFOGMODE相同的值。 請參閱 D3DRENDERSTATETYPE中的D3DRS_FOGTABLEMODE。
FogVertexMode dword 與不含D3DFOG_前置詞的 D3DFOGMODE 值相同。
IndexedVertexBlendEnable bool True 或 False。 與D3DRS_INDEXEDVERTEXBLENDENABLE相同的值。
照明 bool True 或 False。 與D3DRS_LIGHTING相同的值。
LocalViewer bool True 或 False。 與D3DRS_LOCALVIEWER相同的值。
MultiSampleAntialias bool 與D3DRS_MULTISAMPLEANTIALIAS相同的值。
MultiSampleMask dword 與D3DRS_MULTISAMPLEMASK相同的值。
NormalizeNormals bool True 或 False。 與D3DRS_NORMALIZENORMALS相同的值。
PatchSegments SetNPatchMode中的 nSegments 相同值。
PointScale_A 與D3DRS_POINTSCALE_A相同的值。
PointScale_B 與D3DRS_POINTSCALE_B相同的值。
PointScale_C 與D3DRS_POINTSCALE_C相同的值。
PointScaleEnable bool 與D3DRS_POINTSCALEENABLE相同的值。
PointSize 與D3DRS_POINTSIZE相同的值。
PointSize_Min 與D3DRS_POINTSIZE_MIN相同的值。
PointSize_Max 與不含D3DRS_前置詞D3DRS_POINTSIZE_MAX相同的值。
PointSpriteEnable bool True 或 False。 與D3DRS_POINTSPRITEENABLE相同的值。
RangeFogEnable bool True 或 False。 與D3DRS_RANGEFOGENABLE相同的值。
SpecularEnable bool True 或 False。 與D3DRS_SPECULARENABLE相同的值。
SpecularMaterialSource dword 與不含D3DMCS_前置詞的 D3DMATERIALCOLORSOURCE 值相同。 請參閱D3DRS_SPECULARMATERIALSOURCE。
TweenFactor 與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 與不含D3DTADDRESS_前置詞的 D3DTEXTUREADDRESS 值相同。 請參閱D3DSAMP_ADDRESSU。
AddressV[16] dword 與不含D3DTADDRESS_前置詞的 D3DTEXTUREADDRESS 值相同。 請參閱D3DSAMP_ADDRESSV。
AddressW[16] dword 與不含D3DTADDRESS_前置詞的 D3DTEXTUREADDRESS 值相同。 請參閱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] 與不含D3DSAMP_前置詞D3DSAMP_MIPMAPLODBIAS相同的值。
SRGBTexture bool 與不含D3DSAMP_前置詞的D3DSAMP_SRGBTEXTURE值相同。

 

例:

AddressU[0] = CLAMP;
AddressV[0] = CLAMP;
AddressW[0] = CLAMP;

這會限制介於 0 到 1 之間的 UVW 值。

著色器狀態

只有兩種效果著色器狀態:一個與頂點著色器對象相關聯,另一個與圖元著色器對象相關聯。

著色器狀態 類型
PixelShader pixelshader NULL、元件區塊、編譯目標或像素著色器參數。
頂點Shader 頂點陰影器 NULL、元件區塊、編譯目標或像素著色器參數。

 

例:

VertexShader = compile vs_1_1 VSTexture();
PixelShader  = NULL;

這會將 .fx 檔案稍早定義的頂點著色器 VSTexture 編譯為頂點著色器 1.1 版,然後將編譯的著色器設定為頂點著色器。 像素著色器會指派給 NULL

著色器常數狀態

著色器常數狀態可用來存取著色器常數參數。

著色器常數狀態 類型
PixelShaderConstant float[m[n]] m x n 個 floats 陣列;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]] ints 的 m x n 陣列。 m 和 n 是選擇性的。
PixelShaderConstantF float[m[n]] m x n 個浮點數陣列。 m 和 n 是選擇性的。
頂點ShaderConstant float[m[n]] m x n 個浮點數陣列。 m 和 n 是選擇性的。
頂點ShaderConstant1 float4 一個 4D 浮點數。
頂點ShaderConstant2 float4x2 兩個 4D 浮點數。
頂點ShaderConstant3 float4x3 三個 4D 浮點數。
頂點ShaderConstant4 float4x4 四個 4D 浮點數。
頂點ShaderConstantB bool[m[n]] m x n 個 bools 陣列。 m 和 n 是選擇性的。
VertexShaderConstantI int[m[n]] ints 的 m x n 陣列。 m 和 n 是選擇性的。
頂點ShaderConstantF float[m[n]] m x n 個浮點數陣列。 m 和 n 是選擇性的。

 

紋理狀態

紋理狀態會初始化多重文字混合器所使用的紋理。

紋理狀態 類型
Texture[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] 與不含D3DTSS_TCI前置詞的D3DTSS_BUMPENVLSCALE值相同。
BumpEnvLOffset[8] 與不含D3DTSS_TCI前置詞的D3DTSS_BUMPENVLOFFSET值相同。
BumpEnvMat00[8] 與D3DTSS_BUMPENVMAT00相同的值。
BumpEnvMat01[8] 與D3DTSS_BUMPENVMAT01相同的值。
BumpEnvMat10[8] 與D3DTSS_BUMPENVMAT10相同的值。
BumpEnvMat11[8] 與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 矩陣。 與不含D3DTS_前置詞的 D3DTRANSFORMSTATETYPE 值相同。
ViewTransform float4x4 浮點數的 4x4 矩陣。 與不含D3DTS_前置詞的D3DTS_VIEW值相同。
WorldTransform float4x4 浮點數的 4x4 矩陣。

 

效果格式