SasHostParameterValue 컬렉션 사용하여 호스트 애플리케이션 값의 컬렉션과 효과에 노출된 형식 및 멤버를 정의합니다. 효과 파일에서 SasBindAddress 주석을 사용하여 효과 매개 변수를 호스트 애플리케이션의 해당 매개 변수와 연결합니다.
SasHostParameterValue 컬렉션
SasHostParameterValue는 효과 파일(.fx) 구문을 사용하여 정의됩니다. 구문은 효과 파일 구문과 매우 유사하지만 몇 가지 차이점이 있습니다. 예를 들어 texture2d, 샘플러 및 문자열과 같은 개체 형식은 실제 효과 파일에서 유효하지 않지만 SasHostParameterValue에서 유효합니다. 호스트 애플리케이션은 아래 설명을 준수하는 한 어떤 방식으로든 SasHostParameterValue를 구현할 수 있습니다. 실제 정의는 DXSAS 표준 효과 포함 파일([SDK 루트]/Utilities/Source/Sas/Sas.fxh)에 있습니다.
조명 또는 카메라와 같은 SasHostParameterValue의 배열 길이는 제한이 없습니다. 즉, 효과는 해당 배열의 임의 인덱스에 바인딩할 수 있으며 호스트 애플리케이션은 애플리케이션 값을 제공할 수 없는 경우 의미 있는 기본값을 제공해야 합니다.
일부 형식 및 상수는 표준 포함의 정의에 설명된 대로 DXSAS 표준 포함에서 정의해야 합니다. 이렇게 하면 효과가 SasHostParameterValue의 집계된 값을 구조화된 효과 매개 변수에 쉽게 바인딩할 수 있습니다.
| SasHostParameterValue 컬렉션 | 유형 | 구성원 |
|---|---|---|
| 시간 | 뜨다 | Sas.Time.Now |
| 뜨다 | Sas.Time.Last | |
| int | Sas.Time.FrameNumber | |
| 환경 지도 | textureCUBE | Sas.환경맵 |
| 카메라 | SasCamera | Sas.Camera |
| float4x4 | Sas.Camera.WorldToView | |
| float4x4 | Sas.Camera.Projection | |
| 플로트2 | Sas.Camera.NearFarClipping | |
| 라이트 | SasAmbientLight | AmbientLight[ZeroOrMore]; |
| 정수 | Sas.NumAmbientLights | |
| SasAmbientLight | DirectionalLight[ZeroOrMore]; | |
| int | Sas.NumDirectionalLights | |
| SasAmbientLight | PointLight[ZeroOrMore]; | |
| 정수 | Sas.NumPointLights | |
| SasAmbientLight | SpotLight[ZeroOrMore]; | |
| 정수(int) | Sas.NumSpotLights | |
| 그림자 | float4x4 | Sas.Shadow[ZeroOrMore]. WorldToShadow |
| texture2D | Sas.Shadow[ZeroOrMore].ShadowMap | |
| 스켈레톤 | float4x4 | Sas.Skeleton.MeshToJointToWorld[OneOrMore] |
| int | Sas.Skeleton.NumJoints |
시간
호스트 애플리케이션의 가상 클록 또는 시간 값입니다. 멤버는 다음과 같습니다.
- Sas.Time.Now - 효과가 렌더링되는 지점에서 호스트 애플리케이션 가상 클록의 값입니다.
- Sas.Time.Last - 이전 렌더링의 Now 값입니다.
- Sas.Time.FrameNumber - 렌더링된 프레임당 한 번 증가되는 카운터 값입니다.
효과는 이러한 멤버의 값이 매우 긴 실행 시간 동안 순환할 수 있다는 사실을 제대로 처리해야 합니다. 지금과 마지막 값은 매우 클 수 있습니다.
환경 맵
입방 환경 맵입니다. 효과가 Sas.EnvironmentMap에 바인딩을 시도하는 경우 호스트 애플리케이션은 유효한 큐브 텍스처를 제공해야 합니다.
사진기
현재 렌더링 중인 카메라입니다. 멤버는 다음과 같습니다.
- Sas.Camera.WorldToView - 카메라의 복합 월드 뷰 매트릭스입니다.
- Sas.Camera.Projection - 카메라의 프로젝션 매트릭스입니다.
- Sas.Camera.NearFarClipping - 근거리 및 원거리 클리핑 평면의 값입니다.
광
하나 이상의 장면 조명. 조명 컬렉션은 다음과 같은 배열로 선언됩니다.
- 색 - RGB 색입니다. 기본값은 (0,0,0)입니다.
- 방향 - 조명 방향입니다. 기본값은 (0,0,0)입니다.
- 범위 - 광선이 장면에 영향을 미치지 않는 빛으로부터의 거리입니다. 기본값은 0입니다.
- 세타 - 라디안으로 측정된 스포트라이트의 내부 원뿔 각도입니다. 기본값은 0입니다.
- Phi - 라디안으로 측정된 스포트라이트의 외부 원뿔 각도입니다. 기본값은 0입니다.
조명 수는 연결된 배열에 바인딩된 조명 수로 설정해야 합니다. 효과는 조명 수를 무시하고 조명 배열 중 하나의 요소에 바인딩하도록 선택할 수 있습니다. 따라서 호스트 애플리케이션은 배열의 조명 수를 초과하는 요소에 대한 유효한 바인딩을 제공해야 합니다.
ZeroOrMore는 배열에 여러 요소가 있을 수 있음을 의미합니다.
그림자
다음으로 구성된 섀도 버퍼:
- WorldToShadow - 행렬의 배열입니다.
- ShadowMap - 2D 텍스처 파일입니다.
ZeroOrMore는 배열에 개수의 요소가 있을 수 있음을 의미합니다(0은 빈 배열을 의미).
효과는 샘플러를 다음과 같이 선언할 것입니다.
texture2D Shadow
<
string SasBindAddress = "Sas.Shadow[0].ShadowMap";
>;
sampler ShadowSampler = shadow_sampler(Shadow);
해골
현재 렌더링되는 개체를 구성하는 프레임 집합입니다. 프레임 예제는 뼈와 변환입니다. 여기에는 다음이 포함됩니다.
- MeshToJointToWorld - 행렬의 배열입니다.
- NumJoints - 골격의 관절 수입니다.
OneOrMore는 배열에 하나 이상의 요소가 있으며 여러 요소를 포함할 수 있음을 의미합니다.
이 정의는 동일한 SasHostParameterValue 컬렉션 값 집합을 사용하여 고정 메시 개체와 스킨 메시 개체를 모두 서로 다른 해석으로 지원합니다.
SasBindAddress
이 주석은 효과 파일의 맨 위에 추가되어 SasHostParameterValue 컬렉션정의된 해당 매개 변수와 효과 매개 변수를 연결합니다. 주석은 다음과 같이 선언됩니다.
string SasBindAddress = "SasHostParameterValue";
다음은 효과 월드 행렬을 MeshToJointToWorld 행렬에 바인딩하는 예제입니다.
float4x3 World
<
string SasBindAddress = "Sas.Skeleton.MeshToJointToWorld[0]";
>;
이 주석은 MeshToJointToWorld 행렬의 데이터를 사용하여 효과 월드 행렬의 값을 설정해야 한다는 것을 호스트 애플리케이션에 알려줍니다.
바인딩 주소 주석 구문은 ID3DXEffect 효과 매개 변수를 가져오고 설정하는 데 사용하는 구문과 매우 유사하도록 정의되었습니다. DXSAS 문법과 ID3DXEffect 메서드 간의 유일한 차이점은 별표 인덱스 토큰을 추가하는 것입니다. 별표 인덱스를 사용하는 또 다른 예는 다음과 같습니다.
float3 LightColors[6]
<
string SasBindAddress = "Sas.Light[*].Color";
>;
별표 인덱스 토큰은 특정 호스트 환경의 값 배열의 모든 요소(이 경우 색상)가 연결된 매개 변수에 바인딩되어야 함을 뜻합니다. 여러 별표 인덱스 토큰을 사용하면 전체 구조 자체를 바인딩할 필요 없이 효과가 구조 배열의 하위 요소에 바인딩할 수 있습니다. 다음은 처음 6개 조명의 색 값을 효과 매개 변수에 바인딩하는 예제입니다.
관련 항목