Estados de efecto (Direct3D 9)

Los estados de efecto se usan para inicializar los estados de canalización como preparación para el procesamiento de vértices y píxeles.

effect state [ [index] ] = expression;

Donde:

  • estado de efecto: similar a los estados de canalización de funciones fijas tradicionales. A continuación se proporciona una lista completa de estados.
  • [ [index] : índice entero opcional. El índice identifica un estado determinado dentro de una matriz de estados de efecto. Los corchetes externos indican que un índice es opcional. Si se usa un índice, asegúrese de usar los corchetes internos.
  • expresión: expresión de asignación de estado. Consulta Expresiones (Direct3D 9).

Cada estado tiene un tipo de datos nativo. Este es el tipo de datos en el que el estado espera que los valores estén en cuando el efecto los asigna. A continuación se enumeran los tipos de datos que espera cada estado.

Tenga en cuenta que la interfaz de efecto intentará convertir valores en el tipo adecuado lo antes posible. Los valores literales se pueden convertir en tiempo de compilación. Los no literales (es decir, variables normales) deben convertirse cuando se llama a los métodos Set adecuados. Por ejemplo, la interfaz de efecto convertirá los valores establecidos mediante SetBool, SetValue y otras funciones similares si es necesario. Para mejorar el rendimiento, asegúrese de que los valores pasados a la interfaz de efecto ya son el tipo correcto y no necesitarán la conversión. Si el tiempo de ejecución no puede convertir un valor, se devuelve un error.

Los estados de efecto se pueden dividir en las siguientes categorías:

Estados claros

Para habilitar el mejor rendimiento para aplicar un efecto, todos los componentes de una luz o un material deben especificarse en el archivo de efecto. Los estados que no se pueden declarar se establecen en algún valor predeterminado porque no hay ninguna manera de que Direct3D establezca estados claros individualmente.

Estado claro Tipo Valores
LightAmbient[n] float4 Vea el miembro Ambient de D3DLIGHT9.
LightAttenuation0[n] FLOAT Vea el miembro De atenuación0 de D3DLIGHT9.
LightAttenuation1[n] FLOAT Vea el miembro De atenuación1 de D3DLIGHT9.
LightAttenuation2[n] FLOAT Vea el miembro Atenuación2 de D3DLIGHT9.
LightDiffuse[n] float4 Vea el miembro Difuso de D3DLIGHT9.
LightDirection[n] float3 Consulta el miembro Direction de D3DLIGHT9.
LightEnable[n] bool TRUE o FALSE. Vea el argumento bEnable en LightEnable.
LightFalloff[n] FLOAT D3DCOLORVALUE. Vea el miembro Falloff de D3DLIGHT9.
LightPhi[n] FLOAT Vea el miembro Phi de D3DLIGHT9.
LightPosition[n] float3 Vea el miembro Position de D3DLIGHT9.
LightRange[n] FLOAT Consulte el miembro Range de D3DLIGHT9.
LightSpecular[n] float4 Vea el miembro especular de D3DLIGHT9.
LightTheta[n] FLOAT Vea el miembro Theta de D3DLIGHT9.
LightType[n] dword El mismo valor que la matriz de hasta n valores D3DLIGHTTYPE sin el prefijo D3DLIGHT_.

 

Ejemplo:

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>;

Esto habilitará la iluminación, hará que la iluminación apunte al tipo, establezca la posición de la luz en float3<10.0f, 1.0f, 23.0f> y establezca el color ambiente en float4<0.7f, 0.0f, 0.0f, 1.0f>.

Estados materiales

Los estados que no se pueden declarar se establecen en algún valor predeterminado porque no hay ninguna manera de que Direct3D establezca estados de material individualmente.

Estado del material Tipo Valores
MaterialAmbient float4 El mismo valor que Ambient
MaterialDiffuse float4 El mismo valor que El difuso
MaterialEmissive float4 Mismo valor que Emissive
MaterialPower FLOAT El mismo valor que Power
MaterialSpecular float4 El mismo valor que specular

 

Ejemplo:

MaterialDiffuse = float4<0.7f, 0.0f, 0.0f, 1.0f>;
MaterialPower = 3.0f;

Esto establecerá el color difuso en float4<0.7f, 0.0f, 0.0f, 1.0f> y hacer la potencia del material 3.0f.

Estados de representación

Hay dos tipos de estados de representación:

Estados de representación de canalización de píxeles

Los estados de representación del archivo de efecto tienen nombres similares a los estados de canalización de función fija, a menudo con el prefijo quitado.

Estado de representación Tipo Valores
AlphaBlendEnable bool True o False. Los mismos valores que D3DRS_ALPHABLENDENABLE en D3DRENDERSTATETYPE.
AlphaFunc dword Los mismos valores que D3DCMPFUNC sin el prefijo D3DCMP_. Consulte D3DRS_ALPHAFUNC.
AlphaRef dword Los mismos valores que D3DRS_ALPHAREF.
AlphaTestEnable dword True o False. Consulte D3DRS_ALPHATESTENABLE.
BlendOp dword Los mismos valores que D3DBLENDOP sin el prefijo D3DBLENDOP_.
ColorWriteEnable dword Combinación bit a bit de ROJO, VERDE, AZUL y ALFA. Consulte D3DRS_COLORWRITEENABLE.
DepthBias FLOAT Los mismos valores que D3DRS_DEPTHBIAS.
DestBlend dword Los mismos valores que D3DBLEND sin el prefijo D3DBLEND_.
DitherEnable bool True o False. Los mismos valores que D3DRS_DITHERENABLE.
FillMode dword Los mismos valores que D3DFILLMODE sin el prefijo D3DFILL_.
LastPixel dword True o False. Consulte D3DRS_LASTPIXEL.
ShadeMode dword Los mismos valores que D3DSHADEMODE sin el prefijo D3DSHADE_.
SlopeScaleDepthBias FLOAT Los mismos valores que D3DRS_SLOPESCALEDEPTHBIAS.
SrcBlend dword Los mismos valores que D3DBLEND sin el prefijo D3DBLEND_.
SRGBWriteEnable bool True o False. Los mismos valores que D3DRS_SRGBWRITEENABLE.
Galería de símbolosEnable bool True o False. Los mismos valores que D3DRS_STENCILENABLE.
Galería de símbolosFail dword Los mismos valores que D3DSTENCILCAPS sin el prefijo D3DSTENCILCAP_. Consulte D3DRS_STENCILFAIL.
Galería de símbolosFunc dword Los mismos valores que D3DCMPFUNC sin el prefijo D3DCMP_. Consulte D3DRS_STENCILFUNC.
Galería de símbolosMask dword Los mismos valores que D3DRS_STENCILMASK.
Galería de símbolosPass dword Los mismos valores que D3DSTENCILCAPS sin el prefijo D3DSTENCILCAP_. Consulte D3DRS_STENCILPASS.
StencilRef int Los mismos valores que D3DRS_STENCILREF.
Galería de símbolosWriteMask dword Los mismos valores que D3DRS_STENCILWRITEMASK.
Galería de símbolosZFail dword Los mismos valores que D3DSTENCILCAPS sin el prefijo D3DSTENCILCAP_. Consulte D3DRS_STENCILZFAIL.
TextureFactor dword Los mismos valores que D3DCOLOR. Los mismos valores que D3DRS_TEXTUREFACTOR.
Wrap0- Wrap15 dword Los valores son los mismos que los que usa D3DRS_WRAP0. Los valores válidos son:
  • COORD0 (que corresponde a D3DWRAPCOORD_0)
  • COORD1 (que corresponde a D3DWRAPCOORD_1)
  • COORD2 (que corresponde a D3DWRAPCOORD_2)
  • COORD3 (que corresponde a D3DWRAPCOORD_3)
  • U (que corresponde a D3DWRAP_U)
  • V (que corresponde a D3DWRAP_V)
  • W (que corresponde a D3DWRAP_W)
ZEnable dword Los mismos valores que D3DZBUFFERTYPE sin el prefijo D3DZB_.
ZFunc dword Los mismos valores que D3DCMPFUNC sin el prefijo D3DCMP_. Consulte D3DRS_ZFUNC.
ZWriteEnable bool True o False. Consulte D3DRS_ZWRITEENABLE.

Ejemplo:

AlphaBlendEnable = TRUE;
FillMode = WIREFRAME;

Esto habilitará la combinación alfa y hará que todas las geometrías se represente en wireframe.

Estados de representación de canalización de vértices

Los estados de representación del archivo de efecto tienen nombres similares a los estados de canalización de función fija, a menudo con el prefijo quitado.

Estado de representación Tipo Valores
Ambiente float4 Los mismos valores que D3DRS_AMBIENT.
AmbientMaterialSource dword Los mismos valores que D3DMATERIALCOLORSOURCE sin el prefijo D3DMCS_. Consulte D3DRS_AMBIENTMATERIALSOURCE.
Recorte bool True o False. Los mismos valores que D3DRS_CLIPPING.
ClipPlaneEnable dword Combinación bit a bit de macros D3DCLIPPLANE0 - D3DCLIPPLANE5. Consulte D3DCLIPPLANEn y D3DRS_CLIPPLANEENABLE.
ColorVertex bool True o False. Los mismos valores que D3DRS_COLORVERTEX.
CullMode dword Los mismos valores que D3DCULL sin el prefijo D3DCULL_.
DiffuseMaterialSource dword Los mismos valores que D3DMATERIALCOLORSOURCE sin el prefijo D3DMCS_. Consulte D3DRS_DIFFUSEMATERIALSOURCE.
EmissiveMaterialSource dword Los mismos valores que D3DMATERIALCOLORSOURCE sin el prefijo D3DMCS_. Consulte D3DRS_EMISSIVEMATERIALSOURCE.
FogColor dword Los mismos valores que D3DCOLOR. Consulte D3DRS_FOGCOLOR.
FogDensity FLOAT Los mismos valores que D3DRS_FOGDENSITY.
FogEnable bool True o False. Los mismos valores que D3DRS_FOGENABLE.
FogEnd FLOAT Los mismos valores que D3DRS_FOGEND.
FogStart FLOAT Los mismos valores que D3DRS_FOGSTART.
FogTableMode dword Los mismos valores que D3DFOGMODE. Consulte D3DRS_FOGTABLEMODE en D3DRENDERSTATETYPE.
FogVertexMode dword Los mismos valores que D3DFOGMODE sin el prefijo D3DFOG_.
IndexedVertexBlendEnable bool True o False. Los mismos valores que D3DRS_INDEXEDVERTEXBLENDENABLE.
Iluminación bool True o False. Los mismos valores que D3DRS_LIGHTING.
LocalViewer bool True o False. Los mismos valores que D3DRS_LOCALVIEWER.
MultiSampleAntialias bool Los mismos valores que D3DRS_MULTISAMPLEANTIALIAS.
MultiSampleMask dword Los mismos valores que D3DRS_MULTISAMPLEMASK.
NormalizarNormales bool True o False. Los mismos valores que D3DRS_NORMALIZENORMALS.
PatchSegments FLOAT Los mismos valores que nSegments en SetNPatchMode.
PointScale_A FLOAT Los mismos valores que D3DRS_POINTSCALE_A.
PointScale_B FLOAT Los mismos valores que D3DRS_POINTSCALE_B.
PointScale_C FLOAT Los mismos valores que D3DRS_POINTSCALE_C.
PointScaleEnable bool Los mismos valores que D3DRS_POINTSCALEENABLE.
PointSize FLOAT Los mismos valores que D3DRS_POINTSIZE.
PointSize_Min FLOAT Los mismos valores que D3DRS_POINTSIZE_MIN.
PointSize_Max FLOAT Los mismos valores que D3DRS_POINTSIZE_MAX sin el prefijo D3DRS_.
PointSpriteEnable bool True o False. Los mismos valores que D3DRS_POINTSPRITEENABLE.
RangeFogEnable bool True o False. Los mismos valores que D3DRS_RANGEFOGENABLE.
SpecularEnable bool True o False. Los mismos valores que D3DRS_SPECULARENABLE.
SpecularMaterialSource dword Los mismos valores que D3DMATERIALCOLORSOURCE sin el prefijo D3DMCS_. Consulte D3DRS_SPECULARMATERIALSOURCE.
TweenFactor FLOAT Los mismos valores que D3DRS_TWEENFACTOR.
VertexBlend dword Los mismos valores que D3DVERTEXBLENDFLAGS sin el prefijo D3DVBF_. Consulte D3DRS_VERTEXBLEND.

 

Ejemplo:

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

Esto hará que el color ambiente float4<0.7f, 0.0f, 0.0f, 1.0f>, establezca el modo de selección de la cara trasera en sentido contrario a las agujas del reloj y establezca el color de niebla en rojo.

Estados de sampler

Un estado de sampler representa un objeto sampler.

State Tipo Valores
Muestra sampler NULL o un bloque de estado de sampler.

 

Estados de fase del sampler

Los estados de fase del sampler se usan para muestrear texturas. El estado del sampler determina los tipos de filtrado y los modos de direccionamiento de textura.

Estado del sampler Tipo Valores
AddressU[16] dword Los mismos valores que D3DTEXTUREADDRESS sin el prefijo D3DTADDRESS_. Consulte D3DSAMP_ADDRESSU.
AddressV[16] dword Los mismos valores que D3DTEXTUREADDRESS sin el prefijo D3DTADDRESS_. Consulte D3DSAMP_ADDRESSV.
AddressW[16] dword Los mismos valores que D3DTEXTUREADDRESS sin el prefijo D3DTADDRESS_. Consulte D3DSAMP_ADDRESSW.
BorderColor[16] D3DCOLOR Los mismos valores que D3DTEXTUREFILTERTYPE sin el prefijo D3DTEXF_. Consulte D3DSAMP_BORDERCOLOR.
MagFilter[16] dword Los mismos valores que D3DTEXTUREFILTERTYPE sin el prefijo D3DTEXF_. Consulte D3DSAMP_MAGFILTER.
MaxAnisotropy[16] dword Los mismos valores que D3DSAMP_MAXANISOTROPY sin el prefijo D3DSAMP_.
MaxMipLevel[16] int Los mismos valores que D3DSAMP_MAXMIPLEVEL sin el prefijo D3DSAMP_.
MinFilter[16] dword Los mismos valores que D3DSAMP_MINFILTER sin el prefijo D3DSAMP_.
MipFilter[16] dword Los mismos valores que D3DSAMP_MIPFILTER sin el prefijo D3DSAMP_.
MipMapLodBias[16] FLOAT Los mismos valores que D3DSAMP_MIPMAPLODBIAS sin el prefijo D3DSAMP_.
SRGBTexture bool El mismo valor que D3DSAMP_SRGBTEXTURE sin el prefijo D3DSAMP_.

 

Ejemplo:

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

Esto sujeta los valores UVW para que estén comprendidos entre 0 y 1.

Estados del sombreador

Solo hay dos estados de sombreador de efectos: uno asociado a un objeto de sombreador de vértices y el otro asociado a un objeto de sombreador de píxeles.

Estado del sombreador Tipo Valores
PixelShader pixelshader NULL, un bloque de ensamblado, un destino de compilación o un parámetro de sombreador de píxeles.
VertexShader vertexshader NULL, un bloque de ensamblado, un destino de compilación o un parámetro de sombreador de píxeles.

 

Ejemplo:

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

Esto compilará VSTexture, un sombreador de vértices definido anteriormente en el archivo .fx, en la versión 1.1 del sombreador de vértices y, a continuación, establecerá ese sombreador compilado como sombreador de vértices. El sombreador de píxeles se asigna a NULL.

Estados constantes del sombreador

Los estados constantes del sombreador se usan para acceder a los parámetros de constante del sombreador.

Estado de constante del sombreador Tipo Valores
PixelShaderConstant float[m[n]] m x n matriz de floats; m y n son opcionales.
PixelShaderConstant1 float4 Un flotador 4D.
PixelShaderConstant2 float4x2 Dos flotadores 4D.
PixelShaderConstant3 float4x3 Tres flotadores 4D.
PixelShaderConstant4 float4x4 Cuatro flotadores 4D.
PixelShaderConstantB bool[m[n]] m x n matriz de bools; m y n son opcionales.
PixelShaderConstantI int[m[n]] m x n matriz de enteros. m y n son opcionales.
PixelShaderConstantF float[m[n]] m x n matriz de floats. m y n son opcionales.
VertexShaderConstant float[m[n]] m x n matriz de floats. m y n son opcionales.
VertexShaderConstant1 float4 Un flotador 4D.
VertexShaderConstant2 float4x2 Dos flotadores 4D.
VertexShaderConstant3 float4x3 Tres flotadores 4D.
VertexShaderConstant4 float4x4 Cuatro flotadores 4D.
VertexShaderConstantB bool[m[n]] m x n matriz de bools. m y n son opcionales.
VertexShaderConstantI int[m[n]] m x n matriz de enteros. m y n son opcionales.
VertexShaderConstantF float[m[n]] m x n matriz de floats. m y n son opcionales.

 

Estados de textura

Los estados de textura inicializan las texturas utilizadas por el mezclador multitexture.

Estado de textura Tipo Valores
Textura[8] textura NULL o un parámetro de textura.

 

Estados de fase de textura

Los estados de fase de textura configuran texturas y las fases de textura en el blender multitexture.

Estado de fase de textura Tipo Valores
AlphaOp[8] dword Igual que D3DTEXTUREOP sin el prefijo D3DTOP_. Consulte D3DTSS_ALPHAOP.
AlphaArg0[8] dword Igual que D3DTA sin el prefijo D3DTA_. Consulte D3DTSS_ALPHAARG0.
AlphaArg1[8] dword Igual que D3DTA sin el prefijo D3DTA_. Consulte D3DTSS_ALPHAARG1.
AlphaArg2[8] dword Igual que D3DTA sin el prefijo D3DTA_. Consulte D3DTSS_ALPHAARG2.
ColorArg0[8] dword Igual que D3DTA sin el prefijo D3DTA_. Consulte D3DTSS_COLORARG0.
ColorArg1[8] dword Igual que D3DTA sin el prefijo D3DTA_. Consulte D3DTSS_COLORARG1.
ColorArg2[8] dword Igual que D3DTA sin el prefijo D3DTA_. Consulte D3DTSS_COLORARG2.
ColorOp[8] dword Igual que D3DTEXTUREOP sin el prefijo D3DTOP_. Consulte D3DTSS_COLOROP.
BumpEnvLScale[8] FLOAT Los mismos valores que D3DTSS_BUMPENVLSCALE sin el prefijo D3DTSS_TCI.
BumpEnvLOffset[8] FLOAT Los mismos valores que D3DTSS_BUMPENVLOFFSET sin el prefijo D3DTSS_TCI.
BumpEnvMat00[8] FLOAT Los mismos valores que D3DTSS_BUMPENVMAT00.
BumpEnvMat01[8] FLOAT Los mismos valores que D3DTSS_BUMPENVMAT01.
BumpEnvMat10[8] FLOAT Los mismos valores que D3DTSS_BUMPENVMAT10.
BumpEnvMat11[8] FLOAT Los mismos valores que D3DTSS_BUMPENVMAT11.
ResultArg[8] dword Igual que D3DTA sin el prefijo D3DTA_. Consulte D3DTSS_RESULTARG.
TexCoordIndex[8] dword Los mismos valores que D3DTSS_TEXCOORDINDEX sin el prefijo D3DTSS_TCI.
TextureTransformFlags[8] dword Los mismos valores que los valores D3DTEXTURETRANSFORMFLAGS sin el prefijo D3DTTFF_. Consulte D3DTSS_TEXTURETRANSFORMFLAGS.

 

Transformar estados

Establezca los estados de transformación para inicializar matrices de transformación. Los efectos usan matrices transpuestas para mejorar la eficacia. Puede proporcionar matrices transpuestas a un efecto o un efecto transponerá automáticamente las matrices antes de usarlas.

Estado de transformación Tipo Valores
ProjectionTransform float4x4 Matriz 4x4 de floats. Los mismos valores que D3DTS_PROJECTION sin el prefijo D3DTS_.
TextureTransform[8] float4x4 Matriz 4x4 de floats. Los mismos valores que D3DTRANSFORMSTATETYPE sin el prefijo D3DTS_.
ViewTransform float4x4 Matriz 4x4 de floats. Los mismos valores que D3DTS_VIEW sin el prefijo D3DTS_.
WorldTransform float4x4 Matriz 4x4 de floats.

 

Formato de efecto