效果狀態 (Direct3D 9)
效果狀態可用來初始化管線狀態,以準備頂點和像素處理。
effect state [ [index] ] = expression;
哪裡:
- 效果狀態 - 類似於傳統的固定函式管線狀態。 以下提供狀態的完整清單。
- [ [index] ] - 選擇性整數索引。 索引會識別效果狀態陣列中的特定狀態。 外括弧表示索引是選擇性的。 如果使用索引,請務必使用內部括弧。
- 表達式 - 狀態指派表達式。 請參閱 表示式 (Direct3D 9)。
每個狀態都有原生數據類型。 這是當效果指派值時,狀態預期值會進入的數據類型。 每個狀態預期的數據類型如下所列。
請注意,效果介面會嘗試儘早將值轉換成適當的類型。 常值可以在編譯時期轉換。 呼叫適當的 Set 方法時,需要轉換非常值(亦即一般變數)。 例如,效果介面會視需要使用 setBool setBool、SetValue和類似的函式來轉換值。 為了提升效能,請確定傳遞至效果介面的值已經是正確的類型,而且不需要轉型。 如果運行時間無法轉換值,則會傳回錯誤。
效果狀態可以分成下列類別:
淺色狀態
若要啟用套用效果的最佳效能,效果檔案中應指定光線或材質的所有元件。 無法宣告的狀態會設定為某些預設值,因為 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 | TRUE 或 FALSE。 請參閱 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所使用的值相同。 有效值為:
|
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 矩陣。 |