效果状态 (Direct3D 9)
效果状态用于初始化管道状态,为顶点和像素处理做准备。
effect state [ [index] ] = expression;
其中:
- 效果状态 - 类似于传统的固定函数管道状态。 下面提供了状态的完整列表。
- [ [index] ] - 可选整数索引。 索引标识效果状态数组中的特定状态。 外括号指示索引是可选的。 如果使用索引,请确保使用内部括号。
- 表达式 - 状态赋值表达式。 请参阅 Direct3D 9) (表达式 。
每个状态都有一个本机数据类型。 这是在效果分配值时状态预期值处于的数据类型。 下面列出了每个状态所需的数据类型。
请注意,效果接口将尝试尽早将值强制转换为适当的类型。 可以在编译时强制转换文本值。 非文本 (即在调用适当的 Set 方法时,需要强制转换) 常规变量。 例如,如有必要,效果接口将强制转换使用 SetBool、 SetValue 和其他类似函数设置的值。 为了获得更好的性能,请确保传递给效果接口的值已经是正确的类型,并且不需要强制转换。 如果运行时无法强制转换值,则返回错误。
效果状态可以分为以下类别:
浅色状态
若要实现应用效果的最佳性能,应在效果文件中指定光或材料的所有组件。 无法声明的状态设置为某个默认值,因为 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 | 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 的 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 使用的值相同。 有效值为:
|
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 矩阵。 |