효과 상태(Direct3D 9)

효과 상태는 꼭짓점 및 픽셀 처리를 준비하기 위해 파이프라인 상태를 초기화하는 데 사용됩니다.

effect state [ [index] ] = expression;

위치:

  • 효과 상태 - 기존 고정 함수 파이프라인 상태와 유사합니다. 전체 상태 목록은 아래에 나와 있습니다.
  • [ [index] ] - 선택적 정수 인덱스입니다. 인덱스는 효과 상태 배열 내의 특정 상태를 식별합니다. 외부 대괄호는 인덱스가 선택 사항임을 나타냅니다. 인덱스를 사용하는 경우 내부 대괄호를 사용해야 합니다.
  • expression - 상태 할당 식입니다. 식(Direct3D 9)을 참조하세요.

각 상태에는 네이티브 데이터 형식이 있습니다. 이는 효과가 값을 할당할 때 상태가 예상하는 데이터 형식입니다. 각 상태에 필요한 데이터 형식은 다음과 같습니다.

효과 인터페이스는 가능한 한 빨리 적절한 형식으로 값을 캐스팅하려고 시도합니다. 리터럴 값은 컴파일 시간에 캐스팅할 수 있습니다. 적절한 Set 메서드가 호출될 때 리터럴이 아닌 리터럴(예: 일반 변수)을 캐스팅해야 합니다. 예를 들어 효과 인터페이스는 필요한 경우 SetBool, SetValue 및 기타 유사한 함수를 사용하여 설정된 값을 캐스팅합니다. 성능을 향상시키려면 효과 인터페이스에 전달된 값이 이미 올바른 형식이며 캐스팅이 필요하지 않은지 확인합니다. 런타임에서 값을 캐스팅할 수 없는 경우 오류가 반환됩니다.

효과 상태는 다음 범주로 나눌 수 있습니다.

밝은 상태

효과를 적용하는 데 최상의 성능을 발휘하려면 조명 또는 재질의 모든 구성 요소를 효과 파일에 지정해야 합니다. Direct3D에서 조명 상태를 개별적으로 설정할 방법이 없으므로 선언하지 못한 상태는 일부 기본값으로 설정됩니다.

밝은 상태 형식
LightAmbient[n] float4 D3DLIGHT9의 Ambient 멤버를 참조하세요.
LightAttenuation0[n] float D3DLIGHT9의 Attenuation0 멤버를 참조하세요.
LightAttenuation1[n] float D3DLIGHT9의 Attenuation1 멤버를 참조하세요.
LightAttenuation2[n] float D3DLIGHT9의 Attenuation2 멤버를 참조하세요.
LightDiffuse[n] float4 D3DLIGHT9의 Diffuse 멤버를 참조하세요.
LightDirection[n] float3 D3DLIGHT9의 Direction 멤버를 참조하세요.
LightEnable[n] bool TRUE 또는 FALSE입니다. LightEnable에서 bEnable 인수를 참조하세요.
LightFalloff[n] float D3DCOLORVALUE. D3DLIGHT9의 Falloff 멤버를 참조하세요.
LightPhi[n] float D3DLIGHT9의 Phi 멤버를 참조하세요.
LightPosition[n] float3 D3DLIGHT9의 Position 멤버를 참조하세요.
LightRange[n] float D3DLIGHT9의 Range 멤버를 참조하세요.
LightSpecular[n] float4 D3DLIGHT9의 Specular 멤버를 참조하세요.
LightTheta[n] float D3DLIGHT9의 Theta 멤버를 참조하세요.
LightType[n] dword D3DLIGHT_ 접두사 없이 최대 n D3DLIGHTTYPE 값의 배열과 동일한 값입니다.

 

예제:

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

이렇게 하면 조명을 사용하도록 설정하고, 포인트를 유형으로 조명하고, 조명 위치를 float3<10.0f, 1.0f, 23.0f>로 설정하고, 주변 색을 float4<0.7f, 0.0f, 0.0f, 1.0f>로 설정합니다.

재질 상태

Direct3D에서 재질 상태를 개별적으로 설정할 방법이 없으므로 선언하지 못한 상태는 일부 기본값으로 설정됩니다.

재질 상태 형식
MaterialAmbient float4 Ambient와 동일한 값
MaterialDiffuse float4 Diffuse와 동일한 값
MaterialEmissive float4 Emissive와 동일한 값
MaterialPower float Power와 동일한 값
MaterialSpecular float4 Specular와 동일한 값

 

예제:

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

이렇게 하면 확산 색이 float4<0.7f, 0.0f, 0.0f, 1.0f> 로 설정되고 재질의 힘이 3.0f가 됩니다.

렌더링 상태

렌더링 상태에는 두 가지 유형이 있습니다.

픽셀 파이프 렌더링 상태

효과 파일 렌더링 상태에는 고정 함수 파이프라인 상태와 유사한 이름이 있으며, 접두사는 제거되는 경우가 많습니다.

렌더링 상태 형식
AlphaBlendEnable bool True 또는 False D3DRENDERSTATETYPE의 D3DRS_ALPHABLENDENABLE 값과 동일합니다.
AlphaFunc dword D3DCMP_ 접두사 없이 D3DCMPFUNC 와 동일한 값입니다. D3DRS_ALPHAFUNC 참조하세요.
AlphaRef dword D3DRS_ALPHAREF 값과 동일합니다.
AlphaTestEnable dword True 또는 False D3DRS_ALPHATESTENABLE 참조하세요.
BlendOp dword D3DBLENDOP_ 접두사 없이 D3DBLENDOP 와 동일한 값입니다.
ColorWriteEnable dword RED, GREEN, BLUE 및 ALPHA의 비트 조합입니다. D3DRS_COLORWRITEENABLE 참조하세요.
DepthBias float D3DRS_DEPTHBIAS 값과 동일합니다.
DestBlend dword D3DBLEND_ 접두사를 사용하지 않는 D3DBLEND 와 동일한 값입니다.
DitherEnable bool True 또는 False D3DRS_DITHERENABLE 값과 동일합니다.
FillMode dword D3DFILL_ 접두사 없이 D3DFILLMODE 와 동일한 값입니다.
LastPixel dword True 또는 False D3DRS_LASTPIXEL 참조하세요.
ShadeMode dword D3DSHADE_ 접두사 없이 D3DSHADEMODE 와 동일한 값입니다.
SlopeScaleDepthBias float D3DRS_SLOPESCALEDEPTHBIAS 값과 동일합니다.
SrcBlend dword D3DBLEND_ 접두사를 사용하지 않는 D3DBLEND 와 동일한 값입니다.
SRGBWriteEnable bool True 또는 False D3DRS_SRGBWRITEENABLE 값과 동일합니다.
StencilEnable bool True 또는 False D3DRS_STENCILENABLE 값과 동일합니다.
StencilFail dword D3DSTENCILCAP_ 접두사를 사용하지 않는 D3DSTENCILCAPS 와 동일한 값입니다. D3DRS_STENCILFAIL 참조하세요.
StencilFunc dword D3DCMP_ 접두사 없이 D3DCMPFUNC 와 동일한 값입니다. D3DRS_STENCILFUNC 참조하세요.
StencilMask dword D3DRS_STENCILMASK 값과 동일합니다.
StencilPass dword D3DSTENCILCAP_ 접두사를 사용하지 않는 D3DSTENCILCAPS 와 동일한 값입니다. D3DRS_STENCILPASS 참조하세요.
StencilRef int D3DRS_STENCILREF 값과 동일합니다.
StencilWriteMask dword D3DRS_STENCILWRITEMASK 값과 동일합니다.
StencilZFail dword D3DSTENCILCAP_ 접두사를 사용하지 않는 D3DSTENCILCAPS 와 동일한 값입니다. D3DRS_STENCILZFAIL 참조하세요.
TextureFactor dword D3DCOLOR와 동일한 값입니다. D3DRS_TEXTUREFACTOR 값과 동일합니다.
Wrap0 - Wrap15 dword 값은 D3DRS_WRAP0 사용하는 값과 동일합니다. 유효한 값은 다음과 같습니다.
  • COORD0(D3DWRAPCOORD_0 해당)
  • COORD1(D3DWRAPCOORD_1 해당)
  • COORD2(D3DWRAPCOORD_2 해당)
  • COORD3(D3DWRAPCOORD_3 해당)
  • U(D3DWRAP_U 해당)
  • V(D3DWRAP_V 해당)
  • W(D3DWRAP_W 해당)
ZEnable dword D3DZB_ 접두사가 없는 D3DZBUFFERTYPE 과 동일한 값입니다.
ZFunc dword D3DCMP_ 접두사 없이 D3DCMPFUNC 와 동일한 값입니다. D3DRS_ZFUNC 참조하세요.
ZWriteEnable bool True 또는 False D3DRS_ZWRITEENABLE 참조하세요.

예제:

AlphaBlendEnable = TRUE;
FillMode = WIREFRAME;

이렇게 하면 알파 혼합이 가능하고 모든 기하 도형이 와이어프레임으로 렌더링됩니다.

꼭짓점 파이프 렌더링 상태

효과 파일 렌더링 상태에는 고정 함수 파이프라인 상태와 유사한 이름이 있으며 접두사는 제거되는 경우가 많습니다.

렌더링 상태 형식
앰비언트 float4 D3DRS_AMBIENT 값과 동일합니다.
AmbientMaterialSource dword D3DMCS_ 접두사 없이 D3DMATERIALCOLORSOURCE 와 동일한 값입니다. D3DRS_AMBIENTMATERIALSOURCE 참조하세요.
클리핑 bool True 또는 False D3DRS_CLIPPING 값과 동일합니다.
ClipPlaneEnable dword D3DCLIPPLANE0 - D3DCLIPPLANE5 매크로의 비트 조합입니다. D3DCLIPPLANEn 및 D3DRS_CLIPPLANEENABLE 참조하세요.
ColorVertex bool True 또는 False D3DRS_COLORVERTEX 값과 동일합니다.
CullMode dword D3DCULL_ 접두사 없이 D3DCULL 과 동일한 값입니다.
DiffuseMaterialSource dword D3DMCS_ 접두사 없이 D3DMATERIALCOLORSOURCE 와 동일한 값입니다. D3DRS_DIFFUSEMATERIALSOURCE 참조하세요.
EmissiveMaterialSource dword D3DMCS_ 접두사 없이 D3DMATERIALCOLORSOURCE 와 동일한 값입니다. D3DRS_EMISSIVEMATERIALSOURCE 참조하세요.
FogColor dword D3DCOLOR와 동일한 값입니다. D3DRS_FOGCOLOR 참조하세요.
FogDensity float D3DRS_FOGDENSITY 값과 동일합니다.
FogEnable bool True 또는 False D3DRS_FOGENABLE 값과 동일합니다.
FogEnd float D3DRS_FOGEND 값과 동일합니다.
FogStart float D3DRS_FOGSTART 값과 동일합니다.
FogTableMode dword D3DFOGMODE와 동일한 값입니다. D3DRENDERSTATETYPE의 D3DRS_FOGTABLEMODE 참조하세요.
FogVertexMode dword D3DFOG_ 접두사 없이 D3DFOGMODE 와 동일한 값입니다.
IndexedVertexBlendEnable bool True 또는 False D3DRS_INDEXEDVERTEXBLENDENABLE 값과 동일합니다.
조명 bool True 또는 False D3DRS_LIGHTING 값과 동일합니다.
LocalViewer bool True 또는 False D3DRS_LOCALVIEWER 값과 동일합니다.
MultiSampleAntialias bool D3DRS_MULTISAMPLEANTIALIAS 값과 동일합니다.
MultiSampleMask dword D3DRS_MULTISAMPLEMASK 값과 동일합니다.
NormalizeNormals bool True 또는 False D3DRS_NORMALIZENORMALS 값과 동일합니다.
PatchSegments float SetNPatchMode의 nSegments와 동일한 값입니다.
PointScale_A float D3DRS_POINTSCALE_A 값과 동일합니다.
PointScale_B float D3DRS_POINTSCALE_B 값과 동일합니다.
PointScale_C float D3DRS_POINTSCALE_C 값과 동일합니다.
PointScaleEnable bool D3DRS_POINTSCALEENABLE 값과 동일합니다.
PointSize float D3DRS_POINTSIZE 값과 동일합니다.
PointSize_Min float D3DRS_POINTSIZE_MIN 값과 동일합니다.
PointSize_Max float D3DRS_ 접두사 없이 D3DRS_POINTSIZE_MAX 동일한 값입니다.
PointSpriteEnable bool True 또는 False D3DRS_POINTSPRITEENABLE 값과 동일합니다.
RangeFogEnable bool True 또는 False D3DRS_RANGEFOGENABLE 값과 동일합니다.
SpecularEnable bool True 또는 False D3DRS_SPECULARENABLE 값과 동일합니다.
SpecularMaterialSource dword D3DMCS_ 접두사 없이 D3DMATERIALCOLORSOURCE 와 동일한 값입니다. D3DRS_SPECULARMATERIALSOURCE 참조하세요.
TweenFactor float D3DRS_TWEENFACTOR 값과 동일합니다.
VertexBlend dword D3DVBF_ 접두사 없이 D3DVERTEXBLENDFLAGS 와 동일한 값입니다. D3DRS_VERTEXBLEND 참조하세요.

 

예제:

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

이렇게 하면 앰비언트 색 float4<0.7f, 0.0f, 0.0f, 1.0f>, 백페이스 컬링 모드를 시계 반대 방향으로 설정하고 안개 색을 빨간색으로 설정합니다.

샘플러 상태

샘플러 상태는 샘플러 개체를 나타냅니다.

시스템 상태 형식
샘플러 샘플러 NULL 또는 샘플러 상태 블록입니다.

 

샘플러 단계 상태

샘플러 단계 상태는 텍스처를 샘플링하는 데 사용됩니다. 샘플러 상태는 필터링 유형 및 텍스처 주소 지정 모드를 결정합니다.

샘플러 상태 형식
AddressU[16] dword D3DTADDRESS_ 접두사가 없는 D3DTEXTUREADDRESS 와 동일한 값입니다. D3DSAMP_ADDRESSU 참조하세요.
AddressV[16] dword D3DTADDRESS_ 접두사가 없는 D3DTEXTUREADDRESS 와 동일한 값입니다. D3DSAMP_ADDRESSV 참조하세요.
AddressW[16] dword D3DTADDRESS_ 접두사가 없는 D3DTEXTUREADDRESS 와 동일한 값입니다. D3DSAMP_ADDRESSW 참조하세요.
BorderColor[16] D3DCOLOR D3DTEXF_ 접두사를 사용하지 않는 D3DTEXTUREFILTERTYPE 과 동일한 값입니다. D3DSAMP_BORDERCOLOR 참조하세요.
MagFilter[16] dword D3DTEXF_ 접두사를 사용하지 않는 D3DTEXTUREFILTERTYPE 과 동일한 값입니다. D3DSAMP_MAGFILTER 참조하세요.
MaxAnisotropy[16] dword D3DSAMP_ 접두사 없이 D3DSAMP_MAXANISOTROPY 동일한 값입니다.
MaxMipLevel[16] int D3DSAMP_ 접두사 없이 D3DSAMP_MAXMIPLEVEL 동일한 값입니다.
MinFilter[16] dword D3DSAMP_ 접두사 없이 D3DSAMP_MINFILTER 동일한 값입니다.
MipFilter[16] dword D3DSAMP_ 접두사 없이 D3DSAMP_MIPFILTER 값과 동일합니다.
MipMapLodBias[16] float D3DSAMP_ 접두사 없이 D3DSAMP_MIPMAPLODBIAS 값과 동일합니다.
SRGBTexture bool D3DSAMP_ 접두사 없이 D3DSAMP_SRGBTEXTURE 동일한 값입니다.

 

예제:

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

이렇게 하면 UVW 값이 0에서 1 사이로 고정됩니다.

셰이더 상태

효과 셰이더 상태는 꼭짓점 셰이더 개체와 연결된 상태이고 다른 하나는 픽셀 셰이더 개체와 연결된 상태입니다.

셰이더 상태 형식
Pixelshader Pixelshader NULL, 어셈블리 블록, 컴파일 대상 또는 픽셀 셰이더 매개 변수입니다.
VertexShader 꼭짓점 셰이더 NULL, 어셈블리 블록, 컴파일 대상 또는 픽셀 셰이더 매개 변수입니다.

 

예제:

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

이렇게 하면 .fx 파일의 앞부분에서 정의된 꼭짓점 셰이더인 VSTexture를 꼭짓점 셰이더 버전 1.1로 컴파일한 다음 컴파일된 셰이더를 꼭짓점 셰이더로 설정합니다. 픽셀 셰이더가 NULL에 할당됩니다.

셰이더 상수 상태

셰이더 상수 상태는 셰이더 상수 매개 변수에 액세스하는 데 사용됩니다.

셰이더 상수 상태 형식
PixelShaderConstant float[m[n]] m x n 부동 소수자 배열; m과 n은 선택 사항입니다.
PixelShaderConstant1 float4 하나의 4D float.
PixelShaderConstant2 float4x2 두 개의 4D 부동 소수점.
PixelShaderConstant3 float4x3 세 개의 4D 부동 소수점.
PixelShaderConstant4 float4x4 4D 부동 소수점 4개.
PixelShaderConstantB bool[m[n]] m x n 부울 배열; m과 n은 선택 사항입니다.
PixelShaderConstantI int[m[n]] m x n개 int 배열입니다. m과 n은 선택 사항입니다.
PixelShaderConstantF float[m[n]] m x n 부동 소수자 배열입니다. m과 n은 선택 사항입니다.
VertexShaderConstant float[m[n]] m x n 부동 소수자 배열입니다. m과 n은 선택 사항입니다.
VertexShaderConstant1 float4 하나의 4D float.
VertexShaderConstant2 float4x2 두 개의 4D 부동 소수점.
VertexShaderConstant3 float4x3 세 개의 4D 부동 소수점.
VertexShaderConstant4 float4x4 4D 부동 소수점 4개.
VertexShaderConstantB bool[m[n]] m x n 부울 배열입니다. m과 n은 선택 사항입니다.
VertexShaderConstantI int[m[n]] m x n개 int 배열입니다. m과 n은 선택 사항입니다.
VertexShaderConstantF float[m[n]] m x n 부동 소수자 배열입니다. m과 n은 선택 사항입니다.

 

텍스처 상태

텍스처 상태는 멀티텍스처 블렌더에서 사용하는 텍스처를 초기화합니다.

텍스처 상태 형식
텍스처[8] 질감 NULL 또는 텍스처 매개 변수입니다.

 

텍스처 스테이지 상태

텍스처 스테이지 상태는 멀티텍스처 블렌더에서 텍스처 및 텍스처 단계를 설정합니다.

텍스처 스테이지 상태 형식
AlphaOp[8] dword D3DTOP_ 접두사 없이 D3DTEXTUREOP 와 동일합니다. D3DTSS_ALPHAOP 참조하세요.
AlphaArg0[8] dword D3DTA_ 접두사 없이 D3DTA 와 동일합니다. D3DTSS_ALPHAARG0 참조하세요.
AlphaArg1[8] dword D3DTA_ 접두사 없이 D3DTA 와 동일합니다. D3DTSS_ALPHAARG1 참조하세요.
AlphaArg2[8] dword D3DTA_ 접두사 없이 D3DTA 와 동일합니다. D3DTSS_ALPHAARG2 참조하세요.
ColorArg0[8] dword D3DTA_ 접두사 없이 D3DTA 와 동일합니다. D3DTSS_COLORARG0 참조하세요.
ColorArg1[8] dword D3DTA_ 접두사 없이 D3DTA 와 동일합니다. D3DTSS_COLORARG1 참조하세요.
ColorArg2[8] dword D3DTA_ 접두사 없이 D3DTA 와 동일합니다. D3DTSS_COLORARG2 참조하세요.
ColorOp[8] dword D3DTOP_ 접두사 없이 D3DTEXTUREOP 와 동일합니다. D3DTSS_COLOROP 참조하세요.
BumpEnvLScale[8] float D3DTSS_TCI 접두사 없이 D3DTSS_BUMPENVLSCALE 동일한 값입니다.
BumpEnvLOffset[8] float D3DTSS_TCI 접두사 없이 D3DTSS_BUMPENVLOFFSET 동일한 값입니다.
BumpEnvMat00[8] float D3DTSS_BUMPENVMAT00 값과 동일합니다.
BumpEnvMat01[8] float D3DTSS_BUMPENVMAT01 값과 동일합니다.
BumpEnvMat10[8] float D3DTSS_BUMPENVMAT10 값과 동일합니다.
BumpEnvMat11[8] float D3DTSS_BUMPENVMAT11 값과 동일합니다.
ResultArg[8] dword D3DTA_ 접두사 없이 D3DTA 와 동일합니다. D3DTSS_RESULTARG 참조하세요.
TexCoordIndex[8] dword D3DTSS_TCI 접두사 없이 D3DTSS_TEXCOORDINDEX 동일한 값입니다.
TextureTransformFlags[8] dword D3DTTFF_ 접두사 없이 D3DTEXTURETRANSFORMFLAGS 값과 동일한 값입니다. D3DTSS_TEXTURETRANSFORMFLAGS 참조하세요.

 

상태 변환

변환 매트릭스를 초기화하도록 변환 상태를 설정합니다. 효과는 효율성을 위해 트랜스포시드 행렬을 사용합니다. 변환된 매트릭스를 효과에 제공하거나 효과를 사용하기 전에 행렬을 자동으로 변환할 수 있습니다.

변환 상태 형식
ProjectionTransform float4x4 부동 소수의 4x4 행렬입니다. D3DTS_ 접두사 없이 D3DTS_PROJECTION 값과 동일합니다.
TextureTransform[8] float4x4 부동 소수의 4x4 행렬입니다. D3DTS_ 접두사 없이 D3DTRANSFORMSTATETYPE 과 동일한 값입니다.
ViewTransform float4x4 부동 소수의 4x4 행렬입니다. D3DTS_ 접두사 없이 D3DTS_VIEW 동일한 값입니다.
WorldTransform float4x4 부동 소수의 4x4 행렬입니다.

 

효과 형식