Share via


질감 좌표 변환(Direct3D 9)

Direct3D 디바이스는 4x4 행렬을 적용하여 꼭짓점의 텍스처 좌표를 변환할 수 있습니다. 시스템은 기하 도형과 동일한 방식으로 텍스처 좌표에 변환을 적용합니다. 모든 변환(배율, 회전, 변환, 프로젝션, 전단 또는 이들의 조합)은 4x4 행렬로 수행할 수 있습니다.

참고 항목

Direct3D는 변환 및 조명 꼭짓점을 수정하지 않습니다. 따라서 변환 및 조명 꼭짓점을 사용하는 애플리케이션은 Direct3D를 사용하여 꼭짓점의 텍스처 좌표를 변환할 수 없습니다.

 

하드웨어 가속 변환 및 조명 작업(T&L HAL 디바이스)을 지원하는 디바이스도 텍스처 좌표의 변환을 가속화합니다. 변환의 하드웨어 가속을 사용할 수 없는 경우 Direct3D 기하 도형 파이프라인의 플랫폼별 최적화가 텍스처 좌표 변환에 적용됩니다.

텍스처 좌표 변환은 기하 도형의 텍스처 좌표를 직접 수정할 필요가 없도록 특수 효과를 생성하는 데 유용합니다. 간단한 변환 또는 회전 행렬을 사용하여 개체의 텍스처에 애니메이션 효과를 주거나 Direct3D에서 자동으로 생성되는 텍스처 좌표를 변환하여 프로젝션된 텍스처 및 동적 조명 매핑과 같은 고급 효과를 단순화하고 가속화할 수 있습니다. 또한 텍스처 좌표 변환을 사용하여 여러 텍스처 단계에서 여러 용도로 단일 텍스처 좌표 집합을 다시 사용할 수 있습니다.

텍스처 좌표 변환 설정 및 검색

애플리케이션이 기하 도형에 사용하는 행렬과 마찬가지로 IDirect3DDevice9::SetTransformIDirect3DDevice9::GetTransform 메서드를 호출하여 질감 좌표 변환을 설정하고 검색합니다. 이러한 메서드는 D3DTRANSFORMSTATETYPE 열거형 형식의 D3DTS_TEXTURE7 멤버를 통해 D3DTS_TEXTURE0 받아 텍스처 스테이지 0에서 7까지의 변환 행렬을 각각 식별합니다.

다음 코드는 텍스처 스테이지 0의 텍스처 좌표에 적용할 행렬을 설정합니다.

// For this example, assume the d3dDevice variable contains a 
//   valid pointer to an IDirect3DDevice9 interface.

D3DMATRIX matTrans = D3DXMatrixIdentity( NULL );

// Set up the matrix for the desired transformation.
d3dDevice->SetTransform( D3DTS_TEXTURE0, &matTrans );

텍스처 좌표 변환 사용

D3DTSS_TEXTURETRANSFORMFLAGS 텍스처 스테이지 상태는 텍스처 좌표 변환의 적용을 제어합니다. 이 텍스처 스테이지 상태의 값은 D3DTEXTURETRANSFORMFLAGS 열거형 형식으로 정의됩니다.

D3DTSS_TEXTURETRANSFORMFLAGS D3DTTFF_DISABLE(기본값)로 설정하면 텍스처 좌표 변환을 사용할 수 없습니다. 텍스처 좌표 변환이 0단계에 대해 사용하도록 설정되었다고 가정하면 다음 코드는 텍스처 좌표 변환을 사용하지 않도록 설정합니다.

// For this example, assume the d3dDevice variable contains a 
// valid pointer to an IDirect3DDevice9 interface.

d3dDevice->SetTextureStageState( 0, D3DTSS_TEXTURETRANSFORMFLAGS, 
                                 D3DTTFF_DISABLE );

D3DTEXTURETRANSFORMFLAGS 정의된 다른 값은 텍스처 좌표 변환을 사용하도록 설정하고 래스터라이저에 전달되는 결과 텍스처 좌표 요소 수를 제어하는 데 사용됩니다. 예를 들어 다음 코드를 사용합니다.

// For this example, assume the d3dDevice variable contains a 
//   valid pointer to an IDirect3DDevice9 interface.

d3dDevice->SetTextureStageState( 0, D3DTSS_TEXTURETRANSFORMFLAGS, 
                                 D3DTTFF_COUNT2 );

D3DTTFF_COUNT2 값은 시스템에 텍스처 스테이지 0에 대해 설정된 변환 매트릭스를 적용한 다음 수정된 텍스처 좌표의 처음 두 요소를 래스터라이저에 전달하도록 지시합니다.

D3DTTFF_PROJECTED 텍스처 변환 플래그는 프로젝션된 텍스처의 좌표를 나타냅니다. 이 플래그를 지정하면 래스터라이저는 전달된 요소를 마지막 요소로 나눕니다. 예를 들어 다음 코드를 사용합니다.

// For this example, assume the d3dDevice variable contains a 
//   valid pointer to an IDirect3DDevice9 interface.

d3dDevice->SetTextureStageState( 0, D3DTSS_TEXTURETRANSFORMFLAGS, 
                                 D3DTTFF_COUNT3 | D3DTTFF_PROJECTED );

이 예제에서는 세 개의 텍스처 좌표 요소를 래스터라이저에 전달하도록 시스템에 알릴 수 있습니다. 래스터라이저는 처음 두 요소를 세 번째 요소로 나누어 텍스처를 처리하는 데 필요한 2D 텍스처 좌표를 생성합니다.

텍스처 좌표 처리