효과 상태(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 사용하는 값과 동일합니다. 유효한 값은 다음과 같습니다.
|
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 행렬입니다. |