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
- Estados materiales
- Estados de representación
- Estados de sampler
- Estados de fase del sampler
- Estados del sombreador
- Estados constantes del sombreador
- Estados de textura
- Estados de fase de textura
- Transformar estados
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
- Estados de representación de canalización de vértices
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:
|
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. |