다음을 통해 공유


캐스팅 및 변환

호스트 애플리케이션과 효과 매개 변수 간에 값을 전송하는 경우 원본 데이터 형식(호스트 애플리케이션)이 대상 데이터 형식(효과 매개 변수)과 일치할 때 데이터가 예상대로 기록됩니다. 데이터 형식이 다르면 원본 데이터가 대상에 맞게 다시 정렬될 때 캐스팅이 발생합니다.

DXSAS는 다음 형식 변환 규칙을 정의합니다. 효과(.fx) 및 HLSL 형식 변환 규칙의 상위 집합입니다. 또한 DXSAS는 호스트 애플리케이션에서 바인딩된 매개 변수로 전송되는 값에 영향을 줄 수 있는 일부 매개 변수 값 한정자 정의합니다.

형식 캐스팅

다음 표에서는 한 데이터 형식이 다른 데이터 형식으로 전송될 때 발생하는 캐스팅을 나열합니다.

원본 형식 목적지 유형 행동
뜨다 정수 0을 향해 반올림합니다.
float(부동 소수점), int(정수) bool 0(int) 또는 0.0(float)와 같지 않은 값은 참으로 간주되며, 그렇지 않은 경우 이 값은 거짓으로 간주됩니다.
int 뜨다
bool int, float False가 0으로 변환됩니다. True가 1로 변환됩니다.
texture1D, texture2D, texture3D, textureCUBE 텍스처 대상 텍스처는 원본 텍스처 형식으로 처리됩니다.
문자열 texture1D, texture2D, texture3D, textureCUBE 문자열 값은 리소스 주소로 처리되고 매개 변수 초기화 주석동일한 방식으로 확인됩니다. 리소스 주소를 확인할 수 없는 경우 캐스트가 유효하지 않으며 호스트 애플리케이션에서 오류를 반환해야 합니다. 리소스가 제대로 확인되면 식의 형식이 확인된 리소스와 동일한 형식으로 처리됩니다.

 

클래스 캐스팅

위에서 설명한 형식 캐스팅 규칙 외에도 DXSAS는 클래스 형식 간에 변환하는 데 필요한 캐스팅 규칙 집합을 정의합니다. 열 행렬(N x 1), 행 행렬(1 x N) 및 숫자 구조체는 벡터로 처리됩니다.

효과 행렬 매개 변수 및 HLSL 행렬 변수는 값이 행 주 행렬인지 열 주 행렬인지를 정의할 수 있습니다. 그러나 DirectX API는 항상 D3DMATRIX 처리하고 D3DXMATRIX 행 주체로 처리합니다.

원본 클래스 목적지 클래스 행동
스칼라 스칼라 형식 캐스팅을 적용합니다.
스칼라 벡터 형식 캐스팅에 설명된 형식 캐스팅 및 변환 동작을 적용한 후 스칼라 소스 값을 대상 벡터의 모든 구성 요소에 복제합니다.
스칼라 행렬 형식 캐스팅에 설명된 형식 캐스팅 및 변환 동작을 적용한 후 스칼라 소스 값을 대상 행렬의 모든 구성 요소에 복제합니다.
스칼라 객체 캐스트가 잘못되었습니다. 호스트 애플리케이션은 오류를 반환해야 합니다.
스칼라 구조 대상 구조에 숫자 요소만 포함된 경우에만 유효합니다. 유효한 경우 형식 캐스팅에 설명된 형식 캐스팅 및 변환 동작을 적용한 후 스칼라 소스 값을 대상 구조의 모든 구성 요소에 복제합니다.
벡터 스칼라 대상 스칼라는 형식 캐스팅설명된 형식 캐스팅 및 변환 동작을 적용한 후 원본 벡터의 첫 번째 구성 요소 값을 받습니다.
벡터 벡터 대상 벡터에 원본 벡터보다 많은 구성 요소가 있는 경우 잘못된 캐스트입니다. 대상 벡터는 형식 캐스팅설명된 형식 캐스팅 및 변환 동작을 적용한 후 원본 벡터의 가장 왼쪽 값을 받습니다. 원본 벡터의 나머지 오른쪽 구성 요소가 손실됩니다.
벡터 행렬 원본 벡터에 대상 행렬과 동일한 수의 구성 요소가 없는 한 잘못된 캐스트입니다. 캐스트가 유효한 경우 벡터 간 캐스트의 동작이 적용됩니다.
벡터 객체 캐스트가 잘못되었습니다. 호스트 애플리케이션은 오류를 반환해야 합니다.
벡터 구조 대상 구조에 숫자 요소만 있고 원본 벡터에 구성 요소가 있는 것보다 더 많은 요소가 포함되지 않은 경우에만 유효합니다. 대상 구조체의 요소는 형식 캐스팅설명된 형식 캐스팅 및 변환 동작을 적용한 후 원본 벡터의 가장 왼쪽 구성 요소를 받습니다.
행렬 스칼라 대상 스칼라는 형식 캐스팅설명된 형식 캐스팅 및 변환 동작을 적용한 후 원본 행렬의 왼쪽 위 값 값을 받습니다.
행렬 벡터 원본 행렬에 대상 벡터와 동일한 수의 구성 요소가 없으면 캐스팅이 잘못되었습니다. 캐스트가 유효한 경우 위의 벡터-벡터 캐스팅 동작이 적용됩니다.
행렬 행렬 대상 행렬에 원본 행렬보다 더 많은 구성 요소가 있는 경우 잘못된 캐스트입니다. 대상 행렬은 형식 캐스팅설명된 형식 캐스팅 및 변환 동작을 적용한 후 원본 행렬의 왼쪽 위 값을 받습니다. 원본 행렬의 나머지 오른쪽 아래 구성 요소는 손실됩니다.
행렬 객체 캐스트가 잘못되었습니다. 호스트 애플리케이션은 오류를 반환해야 합니다.
행렬 구조 구조체의 크기는 행렬의 크기와 같아야 하며 구조체의 모든 구성 요소는 숫자여야 합니다.
객체 스칼라 캐스트가 잘못되었습니다. 호스트 애플리케이션은 오류를 반환해야 합니다.
객체 벡터 캐스트가 잘못되었습니다. 호스트 애플리케이션은 오류를 반환해야 합니다.
객체 행렬 캐스트가 잘못되었습니다. 호스트 애플리케이션은 오류를 반환해야 합니다.
객체 객체 개체의 형식이 동일하고 형식 캐스팅정의된 동작에 따라 유효한지 확인합니다.
구조 스칼라 원본 구조에 하나 이상의 숫자 멤버가 포함되어 있는 경우 유효합니다. 대상 스칼라는 형식 캐스팅설명된 형식 캐스팅 및 변환 동작을 적용한 후 원본 구조의 첫 번째 숫자 멤버 값을 받습니다.
구조 벡터 원본 구조는 적어도 벡터의 크기여야 합니다. 첫 번째 구성 요소는 대상 벡터의 크기까지 숫자여야 합니다.
구조 행렬 원본 구조는 적어도 벡터의 크기여야 합니다. 첫 번째 구성 요소는 대상 벡터의 크기까지 숫자여야 합니다.
구조 구조 대상 구조는 원본 구조보다 크지 않아야 합니다. 모든 원본 및 대상 구성 요소 사이에 유효한 캐스트가 있어야 합니다.

 

매개 변수 값 한정자

매개 변수 한정자 주석은 매개 변수의 데이터를 제대로 해석할 수 있도록 매개 변수에 추가 정보를 추가합니다. 예를 들어 정규화된 데이터로 벡터를 표현해야 하거나 길이를 인치 단위로 측정할 수 있습니다. 매개 변수 값 한정자 주석은 데이터가 효과 매개 변수로 전송될 때 호스트 애플리케이션이 값을 올바르게 변환할 수 있도록 이 추가 정보를 표현합니다.

매개 변수 한정자는 다음과 같습니다.

매개 변수 값 한정자 주석 묘사
sasNormalize 벡터를 정규화할지 여부를 지정합니다.
SasUnits 매개 변수의 측정 단위를 지정합니다.

 

SasNormalize

SasNormalize 주석은 연결된 매개 변수가 할당될 때마다 정규화된 값이어야 임을 나타냅니다. 이 주석은 float2, float3 및 float4 매개 변수에만 영향을 줍니다.

string SasNormalize = "Value";

여기서 값은 True 또는 False입니다.

예제는 다음과 같습니다.

float3 UpNormal
<
  bool SasNormalize = "True";
>;

SasUnits

효과 매개 변수 데이터는 다음 단위로 제공됩니다.

string SasUnits = "Value";

여기서 값은 다음 중 하나입니다.

측정 유형 묘사
단위 없음 빈 문자열 단위 없음
거리 밀리미터 밀리미터
센티미터 센티미터
m 미터
킬로미터 킬로미터
rad 라디안
시간 ms 밀리초
hr 시간
선형 속도 밀리미터/초 초당 밀리미터
센티미터/초 초당 센티미터
미터/초 초당 미터 수
미터/시간 시간당 미터
킬로미터/시간 시간당 킬로미터
선형 가속 밀리미터/초² 밀리미터/제곱초
cm/sec² 제곱초당 센티미터
m/sec² 초당 미터(제곱)
m/시간² 시간 제곱당 미터
km/hr² 시간 제곱당 킬로미터
각속도 라디안/초 초당 라디안
각가속도 라디안/초² (rad/sec²) 라디안 매 제곱초
지역 mm² 제곱 밀리미터
제곱센티미터 제곱 센티미터
제곱미터
km² 제곱 킬로미터
음량 세제곱밀리미터 밀리미터 큐브
세제곱센티미터 센티미터 큐브
세제곱미터 세제곱미터
세제곱킬로미터 큐브된 킬로미터

 

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