Partilhar via


Estados de Efeito (Direct3D 9)

Os estados de efeito são usados para inicializar estados de pipeline em preparação para processamento de vértice e pixel.

effect state [ [index] ] = expression;

Em que:

  • estado de efeito – semelhante aos estados tradicionais do pipeline de função fixa. Uma lista completa de estados é fornecida abaixo.
  • [ [index] ] – Índice inteiro opcional. O índice identifica um estado específico dentro de uma matriz de estados de efeito. Os colchetes externos indicam que um índice é opcional. Se um índice for usado, use os colchetes internos.
  • expressão – Expressão de atribuição de estado. Consulte Expressões (Direct3D 9).

Cada estado tem um tipo de dados nativo. Esse é o tipo de dados no qual o estado espera que os valores estejam quando o efeito os atribui. Os tipos de dados que cada estado espera estão listados abaixo.

Observe que a interface de efeito tentará converter valores para o tipo apropriado o mais cedo possível. Valores literais podem ser convertidos em tempo de compilação. Não literais (ou seja, variáveis regulares) precisam ser convertidos quando os métodos Set apropriados são chamados. Por exemplo, a interface de efeito converterá valores definidos usando SetBool, SetValue e outras funções semelhantes, se necessário. Para obter um melhor desempenho, verifique se os valores passados para a interface de efeito já são do tipo correto e não precisarão de conversão. Se o runtime não puder converter um valor, um erro será retornado.

Os estados de efeito podem ser divididos nas seguintes categorias:

Estados claros

Para habilitar o melhor desempenho para aplicar um efeito, todos os componentes de uma luz ou de um material devem ser especificados no arquivo de efeito. Os estados que você não declara são definidos como algum valor padrão porque não há como o Direct3D definir estados leves individualmente.

Estado claro Type Valores
LightAmbient[n] float4 Consulte o membro Ambiente de D3DLIGHT9.
LightAttenuation0[n] FLOAT Consulte o membro Attenuation0 do D3DLIGHT9.
LightAttenuation1[n] FLOAT Consulte o membro Attenuation1 do D3DLIGHT9.
LightAttenuation2[n] FLOAT Consulte o membro Attenuation2 do D3DLIGHT9.
LightDiffuse[n] float4 Consulte o membro Diffuse do D3DLIGHT9.
LightDirection[n] float3 Consulte o membro Direction de D3DLIGHT9.
LightEnable[n] bool TRUE ou FALSE. Consulte o argumento bEnable em LightEnable.
LightFalloff[n] FLOAT D3DCOLORVALUE. Consulte o membro Falloff do D3DLIGHT9.
LightPhi[n] FLOAT Consulte o membro Phi do D3DLIGHT9.
LightPosition[n] float3 Consulte o membro Position de D3DLIGHT9.
LightRange[n] FLOAT Consulte o membro Range de D3DLIGHT9.
LightSpecular[n] float4 Consulte o membro Especular do D3DLIGHT9.
LightTheta[n] FLOAT Consulte o membro Theta de D3DLIGHT9.
LightType[n] DWORD Mesmo valor que a matriz de até n valores D3DLIGHTTYPE sem o prefixo D3DLIGHT_.

 

Exemplo:

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

Isso habilitará a iluminação, tornará a iluminação pontual o tipo, definirá a posição da luz como float3<10.0f, 1.0f, 23.0f> e definirá a cor ambiente como float4<0.7f, 0.0f, 0.0f, 1.0f>.

Estados materiais

Os estados que você não declara são definidos como algum valor padrão porque não há como o Direct3D definir estados materiais individualmente.

Estado do material Type Valores
MaterialAmbient float4 Mesmo valor que Ambient
MaterialDiffuse float4 Mesmo valor que Diffuse
MaterialEmissive float4 Mesmo valor que Emissive
MaterialPower FLOAT Mesmo valor que Power
MaterialSpecular float4 Mesmo valor que Specular

 

Exemplo:

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

Isso definirá a cor difusa como float4<0.7f, 0.0f, 0.0f, 1.0f> e tornará a potência do material 3.0f.

Renderizar estados

Há dois tipos de estados de renderização:

Estados de renderização de pipe de pixel

Os estados de renderização de arquivo de efeito têm nomes semelhantes aos estados de pipeline de função fixa, geralmente com o prefixo removido.

Estado de renderização Type Valores
AlphaBlendEnable bool Verdadeiro ou falso. Os mesmos valores que D3DRS_ALPHABLENDENABLE em D3DRENDERSTATETYPE.
AlphaFunc DWORD Os mesmos valores que D3DCMPFUNC sem o prefixo D3DCMP_. Consulte D3DRS_ALPHAFUNC.
AlphaRef DWORD Os mesmos valores que D3DRS_ALPHAREF.
AlphaTestEnable DWORD Verdadeiro ou falso. Consulte D3DRS_ALPHATESTENABLE.
BlendOp DWORD Os mesmos valores que D3DBLENDOP sem o prefixo D3DBLENDOP_.
ColorWriteEnable DWORD Combinação bit a bit de RED, GREEN, BLUE e ALPHA. Veja D3DRS_COLORWRITEENABLE.
DepthBias FLOAT Os mesmos valores que D3DRS_DEPTHBIAS.
DestBlend DWORD Os mesmos valores que D3DBLEND sem o prefixo D3DBLEND_.
DitherEnable bool Verdadeiro ou falso. Os mesmos valores que D3DRS_DITHERENABLE.
Fillmode DWORD Os mesmos valores que D3DFILLMODE sem o prefixo D3DFILL_.
LastPixel DWORD Verdadeiro ou falso. Veja D3DRS_LASTPIXEL.
Shademode DWORD Os mesmos valores que D3DSHADEMODE sem o prefixo D3DSHADE_.
SlopeScaleDepthBias FLOAT Os mesmos valores que D3DRS_SLOPESCALEDEPTHBIAS.
SrcBlend DWORD Os mesmos valores que D3DBLEND sem o prefixo D3DBLEND_.
SRGBWriteEnable bool Verdadeiro ou falso. Os mesmos valores que D3DRS_SRGBWRITEENABLE.
EstêncilEnable bool Verdadeiro ou falso. Os mesmos valores que D3DRS_STENCILENABLE.
StencilFail DWORD Os mesmos valores que D3DSTENCILCAPS sem o prefixo D3DSTENCILCAP_. Consulte D3DRS_STENCILFAIL.
EstêncilFunc DWORD Os mesmos valores que D3DCMPFUNC sem o prefixo D3DCMP_. Consulte D3DRS_STENCILFUNC.
StencilMask DWORD Os mesmos valores que D3DRS_STENCILMASK.
StencilPass DWORD Os mesmos valores que D3DSTENCILCAPS sem o prefixo D3DSTENCILCAP_. Consulte D3DRS_STENCILPASS.
EstêncilRef INT Os mesmos valores que D3DRS_STENCILREF.
StencilWriteMask DWORD Os mesmos valores que D3DRS_STENCILWRITEMASK.
EstêncilZFail DWORD Os mesmos valores que D3DSTENCILCAPS sem o prefixo D3DSTENCILCAP_. Veja D3DRS_STENCILZFAIL.
TextureFactor DWORD Mesmos valores que D3DCOLOR. Os mesmos valores que D3DRS_TEXTUREFACTOR.
Wrap0 - Wrap15 DWORD Os valores são iguais aos valores usados pelo D3DRS_WRAP0. Os valores válidos são:
  • 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 Os mesmos valores que D3DZBUFFERTYPE sem o prefixo D3DZB_.
ZFunc DWORD Os mesmos valores que D3DCMPFUNC sem o prefixo D3DCMP_. Confira D3DRS_ZFUNC.
ZWriteEnable bool Verdadeiro ou falso. Confira D3DRS_ZWRITEENABLE.

Exemplo:

AlphaBlendEnable = TRUE;
FillMode = WIREFRAME;

Isso habilitará a mesclagem alfa e fará com que todas as geometrias sejam renderizadas em wireframe.

Estados de renderização de pipe de vértice

Os estados de renderização do arquivo de efeito têm nomes semelhantes aos estados de pipeline de função fixa, geralmente com o prefixo removido.

Estado de Renderização Type Valores
Ambiente float4 Os mesmos valores que D3DRS_AMBIENT.
AmbientMaterialSource DWORD Mesmos valores que D3DMATERIALCOLORSOURCE sem o prefixo D3DMCS_. Confira D3DRS_AMBIENTMATERIALSOURCE.
Recortando bool Verdadeiro ou falso. Os mesmos valores que D3DRS_CLIPPING.
ClipPlaneEnable DWORD Combinação bit a bit de macros D3DCLIPPLANE0 – D3DCLIPPLANE5. Consulte D3DCLIPPLANEn e D3DRS_CLIPPLANEENABLE.
ColorVertex bool Verdadeiro ou falso. Os mesmos valores que D3DRS_COLORVERTEX.
CullMode DWORD Os mesmos valores que D3DCULL sem o prefixo D3DCULL_.
DiffuseMaterialSource DWORD Mesmos valores que D3DMATERIALCOLORSOURCE sem o prefixo D3DMCS_. Confira D3DRS_DIFFUSEMATERIALSOURCE.
EmissiveMaterialSource DWORD Mesmos valores que D3DMATERIALCOLORSOURCE sem o prefixo D3DMCS_. Confira D3DRS_EMISSIVEMATERIALSOURCE.
FogColor DWORD Mesmos valores que D3DCOLOR. Confira D3DRS_FOGCOLOR.
FogDensity FLOAT Os mesmos valores que D3DRS_FOGDENSITY.
FogEnable bool Verdadeiro ou falso. Mesmos valores que D3DRS_FOGENABLE.
FogEnd FLOAT Os mesmos valores que D3DRS_FOGEND.
FogStart FLOAT Os mesmos valores que D3DRS_FOGSTART.
FogTableMode DWORD Mesmos valores que D3DFOGMODE. Consulte D3DRS_FOGTABLEMODE em D3DRENDERSTATETYPE.
FogVertexMode DWORD Os mesmos valores que D3DFOGMODE sem o prefixo D3DFOG_.
IndexedVertexBlendEnable bool Verdadeiro ou falso. Mesmos valores que D3DRS_INDEXEDVERTEXBLENDENABLE.
Iluminação bool Verdadeiro ou falso. Os mesmos valores que D3DRS_LIGHTING.
LocalViewer bool Verdadeiro ou falso. Os mesmos valores que D3DRS_LOCALVIEWER.
MultiSampleAntialias bool Os mesmos valores que D3DRS_MULTISAMPLEANTIALIAS.
MultiSampleMask DWORD Os mesmos valores que D3DRS_MULTISAMPLEMASK.
NormalizeNormals bool Verdadeiro ou falso. Os mesmos valores que D3DRS_NORMALIZENORMALS.
PatchSegments FLOAT Mesmos valores que nSegments em SetNPatchMode.
PointScale_A FLOAT Os mesmos valores que D3DRS_POINTSCALE_A.
PointScale_B FLOAT Os mesmos valores que D3DRS_POINTSCALE_B.
PointScale_C FLOAT Os mesmos valores que D3DRS_POINTSCALE_C.
PointScaleEnable bool Os mesmos valores que D3DRS_POINTSCALEENABLE.
PointSize FLOAT Os mesmos valores que D3DRS_POINTSIZE.
PointSize_Min FLOAT Os mesmos valores que D3DRS_POINTSIZE_MIN.
PointSize_Max FLOAT Os mesmos valores que D3DRS_POINTSIZE_MAX sem o prefixo D3DRS_.
PointSpriteEnable bool Verdadeiro ou falso. Os mesmos valores que D3DRS_POINTSPRITEENABLE.
RangeFogEnable bool Verdadeiro ou falso. Os mesmos valores que D3DRS_RANGEFOGENABLE.
SpecularEnable bool Verdadeiro ou falso. Os mesmos valores que D3DRS_SPECULARENABLE.
SpecularMaterialSource DWORD Mesmos valores que D3DMATERIALCOLORSOURCE sem o prefixo D3DMCS_. Consulte D3DRS_SPECULARMATERIALSOURCE.
TweenFactor FLOAT Os mesmos valores que D3DRS_TWEENFACTOR.
VertexBlend DWORD Mesmos valores que D3DVERTEXBLENDFLAGS sem o prefixo D3DVBF_. Consulte D3DRS_VERTEXBLEND.

 

Exemplo:

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

Isso fará com que a cor ambiente flutue 4<0,7f, 0,0f, 0,0f, 1,0f>, defina o modo de abate de backface como no sentido anti-horário e defina a cor da neblina como vermelha.

Estados do sampler

Um estado de amostra representa um objeto sampler.

Estado Type Valores
Exemplo sampler NULL ou um bloco de estado do sampler.

 

Estados de estágio do sampler

Os estados de estágio do sampler são usados para amostrar texturas. O estado do sampler determina tipos de filtragem e modos de endereçamento de textura.

Estado do sampler Type Valores
AddressU[16] DWORD Os mesmos valores que D3DTEXTUREADDRESS sem o prefixo D3DTADDRESS_. Consulte D3DSAMP_ADDRESSU.
AddressV[16] DWORD Os mesmos valores que D3DTEXTUREADDRESS sem o prefixo D3DTADDRESS_. Consulte D3DSAMP_ADDRESSV.
AddressW[16] DWORD Os mesmos valores que D3DTEXTUREADDRESS sem o prefixo D3DTADDRESS_. Consulte D3DSAMP_ADDRESSW.
BorderColor[16] D3DCOLOR Os mesmos valores que D3DTEXTUREFILTERTYPE sem o prefixo D3DTEXF_. Consulte D3DSAMP_BORDERCOLOR.
MagFilter[16] DWORD Os mesmos valores que D3DTEXTUREFILTERTYPE sem o prefixo D3DTEXF_. Consulte D3DSAMP_MAGFILTER.
MaxAnisotropy[16] DWORD Os mesmos valores que D3DSAMP_MAXANISOTROPY sem o prefixo D3DSAMP_.
MaxMipLevel[16] INT Os mesmos valores que D3DSAMP_MAXMIPLEVEL sem o prefixo D3DSAMP_.
MinFilter[16] DWORD Os mesmos valores que D3DSAMP_MINFILTER sem o prefixo D3DSAMP_.
MipFilter[16] DWORD Os mesmos valores que D3DSAMP_MIPFILTER sem o prefixo D3DSAMP_.
MipMapLodBias[16] FLOAT Os mesmos valores que D3DSAMP_MIPMAPLODBIAS sem o prefixo D3DSAMP_.
SRGBTexture bool Mesmo valor que D3DSAMP_SRGBTEXTURE sem o prefixo D3DSAMP_.

 

Exemplo:

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

Isso fixa os valores UVW entre 0 e 1.

Estados do sombreador

Há apenas dois estados de sombreador de efeito: um associado a um objeto de sombreador de vértice e outro associado a um objeto de sombreador de pixel.

Estado do sombreador Type Valores
Pixelshader Pixelshader NULL, um bloco de assembly, um destino de compilação ou um parâmetro de sombreador de pixel.
VertexShader vérticeforma NULL, um bloco de assembly, um destino de compilação ou um parâmetro de sombreador de pixel.

 

Exemplo:

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

Isso compilará o VSTexture, um sombreador de vértice definido anteriormente no arquivo .fx, para o sombreador de vértice versão 1.1 e, em seguida, definirá esse sombreador compilado como o sombreador de vértice. O sombreador de pixel é atribuído a NULL.

Estados constantes do sombreador

Os estados constantes do sombreador são usados para acessar parâmetros constantes de sombreador.

Estado constante do sombreador Type Valores
PixelShaderConstant float[m[n]] matriz m x n de floats; m e n são opcionais.
PixelShaderConstant1 float4 Um float 4D.
PixelShaderConstant2 float4x2 Dois floats 4D.
PixelShaderConstant3 float4x3 Três floats 4D.
PixelShaderConstant4 float4x4 Quatro carros alegóricos 4D.
PixelShaderConstantB bool[m[n]] m x n matriz de bools; m e n são opcionais.
PixelShaderConstantI int[m[n]] matriz m x n de ints. m e n são opcionais.
PixelShaderConstantF float[m[n]] matriz m x n de floats. m e n são opcionais.
VertexShaderConstant float[m[n]] matriz m x n de floats. m e n são opcionais.
VertexShaderConstant1 float4 Um float 4D.
VertexShaderConstant2 float4x2 Dois floats 4D.
VertexShaderConstant3 float4x3 Três floats 4D.
VertexShaderConstant4 float4x4 Quatro carros alegóricos 4D.
VertexShaderConstantB bool[m[n]] matriz m x n de bools. m e n são opcionais.
VertexShaderConstantI int[m[n]] matriz m x n de ints. m e n são opcionais.
VertexShaderConstantF float[m[n]] matriz m x n de floats. m e n são opcionais.

 

Estados de textura

Os estados de textura inicializam texturas usadas pelo liquidificador de multitextura.

Estado da textura Type Valores
Textura[8] textura NULL ou um parâmetro de textura.

 

Estados de estágio de textura

Os estados de estágio de textura configuram texturas e os estágios de textura no liquidificador de multitextura.

Estado do estágio de textura Type Valores
AlphaOp[8] DWORD O mesmo que D3DTEXTUREOP sem o prefixo D3DTOP_. Consulte D3DTSS_ALPHAOP.
AlphaArg0[8] DWORD O mesmo que D3DTA sem o prefixo D3DTA_. Consulte D3DTSS_ALPHAARG0.
AlphaArg1[8] DWORD O mesmo que D3DTA sem o prefixo D3DTA_. Consulte D3DTSS_ALPHAARG1.
AlphaArg2[8] DWORD O mesmo que D3DTA sem o prefixo D3DTA_. Consulte D3DTSS_ALPHAARG2.
ColorArg0[8] DWORD O mesmo que D3DTA sem o prefixo D3DTA_. Consulte D3DTSS_COLORARG0.
ColorArg1[8] DWORD O mesmo que D3DTA sem o prefixo D3DTA_. Consulte D3DTSS_COLORARG1.
ColorArg2[8] DWORD O mesmo que D3DTA sem o prefixo D3DTA_. Consulte D3DTSS_COLORARG2.
ColorOp[8] DWORD O mesmo que D3DTEXTUREOP sem o prefixo D3DTOP_. Veja D3DTSS_COLOROP.
BumpEnvLScale[8] FLOAT Os mesmos valores que D3DTSS_BUMPENVLSCALE sem o prefixo D3DTSS_TCI.
BumpEnvLOffset[8] FLOAT Os mesmos valores que D3DTSS_BUMPENVLOFFSET sem o prefixo D3DTSS_TCI.
BumpEnvMat00[8] FLOAT Os mesmos valores que D3DTSS_BUMPENVMAT00.
BumpEnvMat01[8] FLOAT Os mesmos valores que D3DTSS_BUMPENVMAT01.
BumpEnvMat10[8] FLOAT Os mesmos valores que D3DTSS_BUMPENVMAT10.
BumpEnvMat11[8] FLOAT Os mesmos valores que D3DTSS_BUMPENVMAT11.
ResultArg[8] DWORD O mesmo que D3DTA sem o prefixo D3DTA_. Consulte D3DTSS_RESULTARG.
TexCoordIndex[8] DWORD Os mesmos valores que D3DTSS_TEXCOORDINDEX sem o prefixo D3DTSS_TCI.
TextureTransformFlags[8] DWORD Mesmos valores que valores D3DTEXTURETRANSFORMFLAGS sem o prefixo D3DTTFF_. Consulte D3DTSS_TEXTURETRANSFORMFLAGS.

 

Transformar Estados

Defina estados de transformação para inicializar matrizes de transformação. Os efeitos usam matrizes transpostas para eficiência. Você pode fornecer matrizes transpostas para um efeito ou um efeito transporá automaticamente as matrizes antes de usá-las.

Estado da Transformação Type Valores
ProjectionTransform float4x4 Uma matriz 4x4 de floats. Os mesmos valores que D3DTS_PROJECTION sem o prefixo D3DTS_.
TextureTransform[8] float4x4 Uma matriz 4x4 de floats. Os mesmos valores que D3DTRANSFORMSTATETYPE sem o prefixo D3DTS_.
ViewTransform float4x4 Uma matriz 4x4 de floats. Os mesmos valores que D3DTS_VIEW sem o prefixo D3DTS_.
WorldTransform float4x4 Uma matriz 4x4 de floats.

 

Formato de efeito