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
- Materialzustände
- Renderstatus
- Samplerstatus
- Status der Samplerphase
- Shaderzustände
- Shaderkonstantenzustände
- Texturzustände
- Texturphasenzustände
- Transformieren von Status
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:
|
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. |