效果状态 (Direct3D 9)

效果状态用于初始化管道状态,为顶点和像素处理做准备。

effect state [ [index] ] = expression;

其中:

  • 效果状态 - 类似于传统的固定函数管道状态。 下面提供了状态的完整列表。
  • [ [index] ] - 可选整数索引。 索引标识效果状态数组中的特定状态。 外括号指示索引是可选的。 如果使用索引,请确保使用内部括号。
  • 表达式 - 状态赋值表达式。 请参阅 Direct3D 9) (表达式

每个状态都有一个本机数据类型。 这是在效果分配值时状态预期值处于的数据类型。 下面列出了每个状态所需的数据类型。

请注意,效果接口将尝试尽早将值强制转换为适当的类型。 可以在编译时强制转换文本值。 非文本 (即在调用适当的 Set 方法时,需要强制转换) 常规变量。 例如,如有必要,效果接口将强制转换使用 SetBoolSetValue 和其他类似函数设置的值。 为了获得更好的性能,请确保传递给效果接口的值已经是正确的类型,并且不需要强制转换。 如果运行时无法强制转换值,则返回错误。

效果状态可以分为以下类别:

浅色状态

若要实现应用效果的最佳性能,应在效果文件中指定光或材料的所有组件。 无法声明的状态设置为某个默认值,因为 Direct3D 无法单独设置浅色状态。

浅色状态 类型
LightAmbient[n] float4 请参阅 D3DLIGHT9 的环境成员。
LightAttenuation0[n] FLOAT 请参阅 D3DLIGHT9 的 Attenuation0 成员。
LightAttenuation1[n] FLOAT 请参阅 D3DLIGHT9 的 Attenuation1 成员。
LightAttenuation2[n] FLOAT 请参阅 D3DLIGHT9 的 Attenuation2 成员。
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 的 Specular 成员。
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 环境值相同
MaterialDiffuse float4 漫射值相同
MaterialEmissive float4 Emissive 相同的值
MaterialPower FLOAT Power 相同的值
MaterialSpecular float4 Specular 相同的值

 

示例:

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 红色、绿色、蓝色和 ALPHA 的按位组合。 请参阅 D3DRS_COLORWRITEENABLE。
DepthBias FLOAT 值与 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 FLOAT 值与 D3DRS_SLOPESCALEDEPTHBIAS 相同。
SrcBlend dword 与没有D3DBLEND_前缀的 D3DBLEND 值相同。
SRGBWriteEnable bool True 或 False。 值与 D3DRS_SRGBWRITEENABLE 相同。
StencilEnable bool True 或 False。 值与 D3DRS_STENCILENABLE 相同。
StencilFail dword 与没有D3DSTENCILCAP_前缀的 D3DSTENCILCAPS 值相同。 请参阅D3DRS_STENCILFAIL。
StencilFunc 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 使用的值相同。 有效值为:
  • 对应于D3DWRAPCOORD_0) 的 COORD0 (
  • 对应于D3DWRAPCOORD_1) 的 COORD1 (
  • 对应于 D3DWRAPCOORD_2) 的 COORD2 (
  • 对应于 D3DWRAPCOORD_3) 的 COORD3 (
  • 对应于 D3DWRAP_U) 的 U (
  • 对应于 D3DWRAP_V) 的 V (
  • 对应于 D3DWRAP_W) 的 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 FLOAT 值与 D3DRS_FOGDENSITY 相同。
FogEnable bool True 或 False。 值与 D3DRS_FOGENABLE 相同。
FogEnd FLOAT 值与 D3DRS_FOGEND 相同。
FogStart FLOAT 值与 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 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 True 或 False。 值与 D3DRS_POINTSPRITEENABLE 相同。
RangeFogEnable bool True 或 False。 值与 D3DRS_RANGEFOGENABLE 相同。
SpecularEnable bool True 或 False。 值与 D3DRS_SPECULARENABLE 相同。
SpecularMaterialSource dword D3DMATERIALCOLORSOURCE 的值相同,没有D3DMCS_前缀。 请参阅D3DRS_SPECULARMATERIALSOURCE。
TweenFactor FLOAT 值与 D3DRS_TWEENFACTOR 相同。
VertexBlend dword 与不带D3DVBF_前缀的 D3DVERTEXBLENDFLAGS 的值相同。 请参阅D3DRS_VERTEXBLEND。

 

示例:

Ambient = float4<0.7f, 0.0f, 0.0f, 1.0f>;
CullMode = CCW;
FogColor = 0xff0000;

这会使环境颜色浮点 4<0.7f、0.0f、0.0f、1.0f>,将背面剔除模式设置为逆时针模式,并将雾色设置为红色。

采样器状态

采样器状态表示采样器对象。

状态 类型
取样器 sampler 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] FLOAT 值与不带D3DSAMP_前缀的D3DSAMP_MIPMAPLODBIAS相同。
SRGBTexture bool 与不带D3DSAMP_前缀的D3DSAMP_SRGBTEXTURE相同的值。

 

示例:

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

这会将 UVW 值固定为介于 0 和 1 之间。

着色器状态

只有两种效果着色器状态:一种与顶点着色器对象关联,另一种与像素着色器对象关联。

着色器状态 类型
PixelShader pixelshader NULL、程序集块、编译目标或像素着色器参数。
VertexShader vertexshader NULL、程序集块、编译目标或像素着色器参数。

 

示例:

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

这会将 VSTexture(前面在 .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 布尔值数组。 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 矩阵。 与没有D3DTS_前缀的 D3DTRANSFORMSTATETYPE 值相同。
ViewTransform float4x4 浮点数的 4x4 矩阵。 值与不带D3DTS_前缀的D3DTS_VIEW相同。
WorldTransform float4x4 浮点数的 4x4 矩阵。

 

效果格式