다음을 통해 공유


데이터 바인딩

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개 조명의 색 값을 효과 매개 변수에 바인딩하는 예제입니다.

DirectX 표준 주석 및 의미 체계 참조