Effektzustände (Direct3D 9)

Effektzustände werden verwendet, um Pipelinezustände als Vorbereitung für die Vertex- und Pixelverarbeitung zu initialisieren.

effect state [ [index] ] = expression;

Hierbei gilt:

  • Effektzustand: Ähnelt den herkömmlichen Pipelinezuständen für feste Funktionen. Eine vollständige Liste der Zustände finden Sie unten.
  • [ [Index] ] – Optionaler ganzzahliger Index. Der Index identifiziert einen bestimmten Zustand innerhalb eines Arrays von Effektzuständen. Die äußeren Klammern geben an, dass ein Index optional ist. Wenn ein Index verwendet wird, achten Sie darauf, die inneren Klammern zu verwenden.
  • Ausdruck: Zustandszuweisungsausdruck. Weitere Informationen finden Sie unter Ausdrücke (Direct3D 9).

Jeder Zustand verfügt über einen nativen Datentyp. Dies ist der Datentyp, in dem der Zustand erwartet, dass Werte vorhanden sind, wenn der Effekt sie zuweist. Die Datentypen, die jeder Zustand erwartet, sind unten aufgeführt.

Beachten Sie, dass die Effektschnittstelle versucht, Werte so früh wie möglich in den entsprechenden Typ zu umwandeln. Literalwerte können zur Kompilierzeit umgewandelt werden. Nichtliterale (d. h. reguläre Variablen) müssen umgewandelt werden, wenn die entsprechenden Set-Methoden aufgerufen werden. Beispielsweise wandelt die Effektschnittstelle bei Bedarf werte um, die mithilfe von SetBool, SetValue und anderen ähnlichen Funktionen festgelegt wurden. Stellen Sie zur Verbesserung der Leistung sicher, dass die an die Effektschnittstelle übergebenen Werte bereits den richtigen Typ aufweisen und keine Umwandlung erforderlich ist. Wenn die Laufzeit keinen Wert umwandeln kann, wird ein Fehler zurückgegeben.

Effektzustände können in die folgenden Kategorien unterteilt werden:

Lichtzustände

Um die beste Leistung zum Anwenden eines Effekts zu ermöglichen, sollten alle Komponenten einer Leuchte oder eines Materials in der Effektdatei angegeben werden. Zustände, die Sie nicht deklarieren können, werden auf einen Standardwert festgelegt, da Direct3D keine Möglichkeit gibt, lichte Zustände einzeln festzulegen.

Lichtzustand Typ Werte
LightAmbient[n] float4 Weitere Informationen finden Sie im Ambient-Element von D3DLIGHT9.
LightAttenuation0[n] float Weitere Informationen finden Sie im Member Attenuation0 von D3DLIGHT9.
LightAttenuation1[n] float Weitere Informationen finden Sie im Member Attenuation1 von D3DLIGHT9.
LightAttenuation2[n] float Weitere Informationen finden Sie im Member Attenuation2 von D3DLIGHT9.
LightDiffuse[n] float4 Weitere Informationen finden Sie im Diffusen Element von D3DLIGHT9.
LightDirection[n] float3 Weitere Informationen finden Sie im Direction-Element von D3DLIGHT9.
LightEnable[n] bool TRUE oder FALSE. Siehe das Argument bEnable in LightEnable.
LightFalloff[n] float D3DCOLORVALUE. Weitere Informationen finden Sie im Falloff-Element von D3DLIGHT9.
LightPhi[n] float Sehen Sie sich das Phi-Element von D3DLIGHT9 an.
LightPosition[n] float3 Weitere Informationen finden Sie im Element Position von D3DLIGHT9.
LightRange[n] float Weitere Informationen finden Sie im Bereichselement von D3DLIGHT9.
LightSpecular[n] float4 Siehe das Specular-Element von D3DLIGHT9.
LightTheta[n] float Weitere Informationen finden Sie im Theta-Element von D3DLIGHT9.
LightType[n] dword Derselbe Wert wie das Array von bis zu n D3DLIGHTTYPE-Werten ohne das präfix D3DLIGHT_.

 

Beispiel:

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

Dadurch wird die Beleuchtung aktiviert, der Typ hervorgehoben, die Lichtposition auf float3<10.0f, 1.0f, 23.0f> festgelegt und die Umgebungsfarbe auf float4<0.7f, 0.0f, 0.0f, 1.0f> festgelegt.

Materialzustände

Zustände, die Sie nicht deklarieren können, werden auf einen Standardwert festgelegt, da Direct3D keine Möglichkeit gibt, Materialzustände einzeln festzulegen.

Materialzustand Typ Werte
MaterialAmbient float4 Derselbe Wert wie Ambient
MaterialDiffuse float4 Derselbe Wert wie Diffuse
MaterialEmissive float4 Derselbe Wert wie emissive
MaterialPower float Derselbe Wert wie Power
MaterialSpecular float4 Derselbe Wert wie Specular

 

Beispiel:

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

Dadurch wird die diffuse Farbe auf float4<0.7f, 0.0f, 0.0f, 1.0f> festgelegt und die Leistung des Materials 3.0f.

Renderstatus

Es gibt zwei Arten von Renderzuständen:

Pixelpipe-Renderzustände

Effektdateirenderstatus weisen Namen auf, die den Pipelinezuständen der festen Funktion ähneln, häufig mit entferntem Präfix.

Renderzustand Typ Werte
AlphaBlendEnable bool „True“ oder „False“. Dieselben Werte wie D3DRS_ALPHABLENDENABLE in D3DRENDERSTATETYPE.
AlphaFunc dword Dieselben Werte wie D3DCMPFUNC ohne das präfix D3DCMP_. Siehe D3DRS_ALPHAFUNC.
AlphaRef dword Dieselben Werte wie D3DRS_ALPHAREF.
AlphaTestEnable dword „True“ oder „False“. Siehe D3DRS_ALPHATESTENABLE.
BlendOp dword Dieselben Werte wie D3DBLENDOP ohne das präfix D3DBLENDOP_.
ColorWriteEnable dword Bitweise Kombination aus ROT, GRÜN, BLAU und ALPHA. Siehe D3DRS_COLORWRITEENABLE.
DepthBias float Dieselben Werte wie D3DRS_DEPTHBIAS.
DestBlend dword Dieselben Werte wie D3DBLEND ohne das präfix D3DBLEND_.
DitherEnable bool „True“ oder „False“. Dieselben Werte wie D3DRS_DITHERENABLE.
Fillmode dword Dieselben Werte wie D3DFILLMODE ohne D3DFILL_ Präfix.
LastPixel dword „True“ oder „False“. Siehe D3DRS_LASTPIXEL.
ShadeMode dword Dieselben Werte wie D3DSHADEMODE ohne das präfix D3DSHADE_.
SlopeScaleDepthBias float Dieselben Werte wie D3DRS_SLOPESCALEDEPTHBIAS.
SrcBlend dword Dieselben Werte wie D3DBLEND ohne das präfix D3DBLEND_.
SRGBWriteEnable bool „True“ oder „False“. Dieselben Werte wie D3DRS_SRGBWRITEENABLE.
StencilEnable bool „True“ oder „False“. Dieselben Werte wie D3DRS_STENCILENABLE.
StencilFail dword Dieselben Werte wie D3DSTENCILCAPS ohne das präfix D3DSTENCILCAP_. Weitere Informationen finden Sie unter D3DRS_STENCILFAIL.
StencilFunc dword Dieselben Werte wie D3DCMPFUNC ohne das präfix D3DCMP_. Weitere Informationen finden Sie unter D3DRS_STENCILFUNC.
StencilMask dword Dieselben Werte wie D3DRS_STENCILMASK.
StencilPass dword Dieselben Werte wie D3DSTENCILCAPS ohne das präfix D3DSTENCILCAP_. Siehe D3DRS_STENCILPASS.
StencilRef INT Dieselben Werte wie D3DRS_STENCILREF.
StencilWriteMask dword Dieselben Werte wie D3DRS_STENCILWRITEMASK.
StencilZFail dword Dieselben Werte wie D3DSTENCILCAPS ohne das präfix D3DSTENCILCAP_. Siehe D3DRS_STENCILZFAIL.
TextureFactor dword Dieselben Werte wie D3DCOLOR. Dieselben Werte wie D3DRS_TEXTUREFACTOR.
Wrap0 – Wrap15 dword Die Werte sind identisch mit den Werten, die von D3DRS_WRAP0 verwendet werden. Gültige Werte sind:
  • COORD0 (entspricht D3DWRAPCOORD_0)
  • COORD1 (entspricht D3DWRAPCOORD_1)
  • COORD2 (entspricht D3DWRAPCOORD_2)
  • COORD3 (entspricht D3DWRAPCOORD_3)
  • U (entspricht D3DWRAP_U)
  • V (entspricht D3DWRAP_V)
  • W (entspricht D3DWRAP_W)
ZEnable dword Dieselben Werte wie D3DZBUFFERTYPE ohne D3DZB_ Präfix.
ZFunc dword Dieselben Werte wie D3DCMPFUNC ohne das präfix D3DCMP_. Siehe D3DRS_ZFUNC.
ZWriteEnable bool „True“ oder „False“. Siehe D3DRS_ZWRITEENABLE.

Beispiel:

AlphaBlendEnable = TRUE;
FillMode = WIREFRAME;

Dies ermöglicht die Alphamischung und bewirkt, dass alle Geometrien im Drahtmodell gerendert werden.

Vertexpipe-Renderzustände

Effektdateirenderstatus weisen Namen auf, die den Pipelinezuständen der festen Funktion ähneln, häufig mit entferntem Präfix.

Renderzustand Typ Werte
Umgebend float4 Dieselben Werte wie D3DRS_AMBIENT.
AmbientMaterialSource dword Dieselben Werte wie D3DMATERIALCOLORSOURCE ohne das präfix D3DMCS_. Siehe D3DRS_AMBIENTMATERIALSOURCE.
Freistellen bool „True“ oder „False“. Dieselben Werte wie D3DRS_CLIPPING.
ClipPlaneEnable dword Bitweise Kombination von D3DCLIPPLANE0 - D3DCLIPPLANE5-Makros. Siehe D3DCLIPPLANEn und D3DRS_CLIPPLANEENABLE.
ColorVertex bool „True“ oder „False“. Dieselben Werte wie D3DRS_COLORVERTEX.
CullMode dword Dieselben Werte wie D3DCULL ohne das präfix D3DCULL_.
DiffuseMaterialSource dword Dieselben Werte wie D3DMATERIALCOLORSOURCE ohne das präfix D3DMCS_. Weitere Informationen finden Sie unter D3DRS_DIFFUSEMATERIALSOURCE.
EmissiveMaterialSource dword Dieselben Werte wie D3DMATERIALCOLORSOURCE ohne das präfix D3DMCS_. Siehe D3DRS_EMISSIVEMATERIALSOURCE.
FogColor dword Dieselben Werte wie D3DCOLOR. Weitere Informationen finden Sie unter D3DRS_FOGCOLOR.
FogDensity float Dieselben Werte wie D3DRS_FOGDENSITY.
FogEnable bool „True“ oder „False“. Dieselben Werte wie D3DRS_FOGENABLE.
FogEnd float Dieselben Werte wie D3DRS_FOGEND.
FogStart float Dieselben Werte wie D3DRS_FOGSTART.
FogTableMode dword Dieselben Werte wie D3DFOGMODE. Weitere Informationen finden Sie unter D3DRS_FOGTABLEMODE in D3DRENDERSTATETYPE.
FogVertexMode dword Dieselben Werte wie D3DFOGMODE ohne D3DFOG_ Präfix.
IndexedVertexBlendEnable bool „True“ oder „False“. Dieselben Werte wie D3DRS_INDEXEDVERTEXBLENDENABLE.
Beleuchtung bool „True“ oder „False“. Dieselben Werte wie D3DRS_LIGHTING.
LocalViewer bool „True“ oder „False“. Dieselben Werte wie D3DRS_LOCALVIEWER.
MultiSampleAntialias bool Dieselben Werte wie D3DRS_MULTISAMPLEANTIALIAS.
MultiSampleMask dword Dieselben Werte wie D3DRS_MULTISAMPLEMASK.
NormalizeNormals bool „True“ oder „False“. Dieselben Werte wie D3DRS_NORMALIZENORMALS.
PatchSegments float Dieselben Werte wie nSegments in SetNPatchMode.
PointScale_A float Dieselben Werte wie D3DRS_POINTSCALE_A.
PointScale_B float Dieselben Werte wie D3DRS_POINTSCALE_B.
PointScale_C float Dieselben Werte wie D3DRS_POINTSCALE_C.
PointScaleEnable bool Dieselben Werte wie D3DRS_POINTSCALEENABLE.
PointSize float Dieselben Werte wie D3DRS_POINTSIZE.
PointSize_Min float Dieselben Werte wie D3DRS_POINTSIZE_MIN.
PointSize_Max float Dieselben Werte wie D3DRS_POINTSIZE_MAX ohne das präfix D3DRS_.
PointSpriteEnable bool „True“ oder „False“. Dieselben Werte wie D3DRS_POINTSPRITEENABLE.
RangeFogEnable bool „True“ oder „False“. Dieselben Werte wie D3DRS_RANGEFOGENABLE.
SpecularEnable bool „True“ oder „False“. Dieselben Werte wie D3DRS_SPECULARENABLE.
SpecularMaterialSource dword Dieselben Werte wie D3DMATERIALCOLORSOURCE ohne das präfix D3DMCS_. Siehe D3DRS_SPECULARMATERIALSOURCE.
TweenFactor float Dieselben Werte wie D3DRS_TWEENFACTOR.
VertexBlend dword Dieselben Werte wie D3DVERTEXBLENDFLAGS ohne das präfix D3DVBF_. Siehe D3DRS_VERTEXBLEND.

 

Beispiel:

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

Dadurch wird die Umgebungsfarbe 4<0.7f, 0.0f, 0.0f, 1.0f> schweben, der Rückflächen-Kulling-Modus auf gegen den Uhrzeigersinn festgelegt und die Nebelfarbe auf Rot festgelegt.

Samplerzustände

Ein Samplerzustand stellt ein Samplerobjekt dar.

State type Werte
Sampler Sampler NULL oder ein Samplerstatusblock.

 

Sampler-Phasenzustände

Samplerstufenzustände werden verwendet, um Texturen zu samplen. Der Samplerzustand bestimmt Filtertypen und Texturadressierungsmodi.

Samplerstatus Typ Werte
AddressU[16] dword Dieselben Werte wie D3DTEXTUREADDRESS ohne das präfix D3DTADDRESS_. Siehe D3DSAMP_ADDRESSU.
AddressV[16] dword Dieselben Werte wie D3DTEXTUREADDRESS ohne das präfix D3DTADDRESS_. Siehe D3DSAMP_ADDRESSV.
AddressW[16] dword Dieselben Werte wie D3DTEXTUREADDRESS ohne das präfix D3DTADDRESS_. Siehe D3DSAMP_ADDRESSW.
BorderColor[16] D3DCOLOR Dieselben Werte wie D3DTEXTUREFILTERTYPE ohne das präfix D3DTEXF_. Siehe D3DSAMP_BORDERCOLOR.
MagFilter[16] dword Dieselben Werte wie D3DTEXTUREFILTERTYPE ohne das präfix D3DTEXF_. Siehe D3DSAMP_MAGFILTER.
MaxAnisotropie[16] dword Dieselben Werte wie D3DSAMP_MAXANISOTROPY ohne das präfix D3DSAMP_.
MaxMipLevel[16] INT Dieselben Werte wie D3DSAMP_MAXMIPLEVEL ohne das präfix D3DSAMP_.
MinFilter[16] dword Dieselben Werte wie D3DSAMP_MINFILTER ohne das präfix D3DSAMP_.
MipFilter[16] dword Dieselben Werte wie D3DSAMP_MIPFILTER ohne das präfix D3DSAMP_.
MipMapLodBias[16] float Dieselben Werte wie D3DSAMP_MIPMAPLODBIAS ohne das präfix D3DSAMP_.
SRGBTexture bool Der gleiche Wert wie D3DSAMP_SRGBTEXTURE ohne das präfix D3DSAMP_.

 

Beispiel:

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

Dadurch werden UVW-Werte zwischen 0 und 1 geklemmt.

Shaderzustände

Es gibt nur zwei Effektshaderzustände: einen, der einem Vertex-Shaderobjekt und der andere einem Pixel-Shaderobjekt zugeordnet ist.

Shaderstatus Typ Werte
Pixelshader Pixelshader NULL, ein Assemblyblock, ein Kompilierungsziel oder ein Pixel-Shaderparameter.
VertexShader vertexshader NULL, ein Assemblyblock, ein Kompilierungsziel oder ein Pixel-Shaderparameter.

 

Beispiel:

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

Dadurch wird VSTexture, ein vertex-Shader, der zuvor in der FX-Datei definiert wurde, in den Vertex-Shader Version 1.1 kompiliert und dann diesen kompilierten Shader als Vertex-Shader festgelegt. Der Pixel-Shader ist NULL zugewiesen.

Shaderkonstante Zustände

Shaderkonstantenzustände werden verwendet, um auf Shaderkonstantenparameter zuzugreifen.

Shaderkonstante Zustand Typ Werte
PixelShaderConstant float[m[n]] m x n Array von Floats; m und n sind optional.
PixelShaderConstant1 float4 Ein 4D-Float.
PixelShaderConstant2 float4x2 Zwei 4D-Floats.
PixelShaderConstant3 float4x3 Drei 4D-Floats.
PixelShaderConstant4 float4x4 Vier 4D-Floats.
PixelShaderConstantB bool[m[n]] m x n Array von Bools; m und n sind optional.
PixelShaderConstantI int[m[n]] m x n Array von Ints. m und n sind optional.
PixelShaderConstantF float[m[n]] m x n Array von Floats. m und n sind optional.
VertexShaderConstant float[m[n]] m x n Array von Floats. m und n sind optional.
VertexShaderConstant1 float4 Ein 4D-Float.
VertexShaderConstant2 float4x2 Zwei 4D-Floats.
VertexShaderConstant3 float4x3 Drei 4D-Floats.
VertexShaderConstant4 float4x4 Vier 4D-Floats.
VertexShaderConstantB bool[m[n]] m x n Array von Bools. m und n sind optional.
VertexShaderConstantI int[m[n]] m x n Array von Ints. m und n sind optional.
VertexShaderConstantF float[m[n]] m x n Array von Floats. m und n sind optional.

 

Texturzustände

Texturzustände initialisieren Texturen, die vom Multitextur-Blender verwendet werden.

Texturzustand Typ Werte
Textur[8] Struktur NULL oder ein Texturparameter.

 

Texturstufenzustände

Texturphasenzustände richten Texturen und die Texturphasen im Multitextur-Blender ein.

Zustand der Texturphase Typ Werte
AlphaOp[8] dword Identisch mit D3DTEXTUREOP ohne das präfix D3DTOP_. Siehe D3DTSS_ALPHAOP.
AlphaArg0[8] dword Identisch mit D3DTA ohne D3DTA_ Präfix. Weitere Informationen finden Sie unter D3DTSS_ALPHAARG0.
AlphaArg1[8] dword Identisch mit D3DTA ohne D3DTA_ Präfix. Siehe D3DTSS_ALPHAARG1.
AlphaArg2[8] dword Identisch mit D3DTA ohne D3DTA_ Präfix. Siehe D3DTSS_ALPHAARG2.
ColorArg0[8] dword Identisch mit D3DTA ohne D3DTA_ Präfix. Siehe D3DTSS_COLORARG0.
ColorArg1[8] dword Identisch mit D3DTA ohne D3DTA_ Präfix. Siehe D3DTSS_COLORARG1.
ColorArg2[8] dword Identisch mit D3DTA ohne D3DTA_ Präfix. Siehe D3DTSS_COLORARG2.
ColorOp[8] dword Identisch mit D3DTEXTUREOP ohne D3DTOP_ Präfix. Siehe D3DTSS_COLOROP.
BumpEnvLScale[8] float Dieselben Werte wie D3DTSS_BUMPENVLSCALE ohne das präfix D3DTSS_TCI.
BumpEnvLOffset[8] float Dieselben Werte wie D3DTSS_BUMPENVLOFFSET ohne D3DTSS_TCI Präfix.
BumpEnvMat00[8] float Dieselben Werte wie D3DTSS_BUMPENVMAT00.
BumpEnvMat01[8] float Dieselben Werte wie D3DTSS_BUMPENVMAT01.
BumpEnvMat10[8] float Dieselben Werte wie D3DTSS_BUMPENVMAT10.
BumpEnvMat11[8] float Dieselben Werte wie D3DTSS_BUMPENVMAT11.
ResultArg[8] dword Identisch mit D3DTA ohne D3DTA_ Präfix. Siehe D3DTSS_RESULTARG.
TexCoordIndex[8] dword Dieselben Werte wie D3DTSS_TEXCOORDINDEX ohne das präfix D3DTSS_TCI.
TextureTransformFlags[8] dword Dieselben Werte wie D3DTEXTURETRANSFORMFLAGS-Werte ohne D3DTTFF_ Präfix. Siehe D3DTSS_TEXTURETRANSFORMFLAGS.

 

Transformieren von Status

Legen Sie Transformationszustände fest, um Transformationsmatrizen zu initialisieren. Effekte verwenden transponierte Matrizen aus Effizienzgründen. Sie können transponierte Matrizen für einen Effekt bereitstellen, oder ein Effekt transponiert die Matrizen automatisch, bevor sie verwendet werden.

Transformieren des Zustands Typ Werte
ProjectionTransform float4x4 Eine 4x4-Matrix von Floats. Dieselben Werte wie D3DTS_PROJECTION ohne D3DTS_ Präfix.
TextureTransform[8] float4x4 Eine 4x4-Matrix von Floats. Dieselben Werte wie D3DTRANSFORMSTATETYPE ohne das präfix D3DTS_.
ViewTransform float4x4 Eine 4x4-Matrix von Floats. Dieselben Werte wie D3DTS_VIEW ohne das präfix D3DTS_.
WorldTransform float4x4 Eine 4x4-Matrix von Floats.

 

Effektformat