DirectX Graphics 프로그래밍 가이드 고정 기능 파이프라인 텍스처 텍스처 좌표 텍스처 좌표 처리 텍스처 좌표 변환   [목차열람] [주소복사] [슬롯비우기]
텍스처 좌표 변환
 
Microsoft DirectX 9.0

텍스처 좌표 변환


Microsoft® Direct3D® 장치는, 4 × 4 행렬을 적용해, 정점의 텍스처 좌표를 변환 할 수 있다. 시스템은, 지오메트리와 같이 텍스처 좌표에 변환을 적용한다. 모든 변환 (스케일링, 회전, 평행이동, 투영, 전단, 또는 이러한 조합하고)은, 4 × 4 행렬을 사용해 실행된다.

  Direct3D 에서는, 변환이 끝난 조명 끝난 정점은 수정되지 않는다. 따라서, 변환이 끝난 조명 끝난 정점을 사용하는 애플리케이션에서는, Direct3D 에 의해 정점의 텍스처 좌표를 변환 할 수 없다.

하드웨어 가속화에 의한 변환 & 조명 처리를 지원 하는 장치 (TnLHAL 장치)에서는, 텍스처 좌표 변환도 고속 처리된다. 하드웨어 가속화에 의한 변환을 이용할 수 없는 경우는, Direct3D 지오메트리 파이프라인의 플랫폼 고유의 최적화에 의해 텍스처 좌표 변환이 실행된다.

텍스처 좌표 변환은, 지오메트리의 텍스처 좌표를 직접 변경하지 않고 특수 효과를 내려고 하는 경우에 편리하다. 단순한 평행이동 행렬이나 회전 행렬을 사용해, 개체 위에의 텍스처를 애니메이션 하거나 Direct3D 에 의해 자동 생성되는 텍스처 좌표를 변환 하는 것으로, 투영 텍스처나 동적 라이트 맵핑 등 고도의 이펙트를 단순화 해, 고속 처리하는 일도 가능하다. 또, 텍스처 좌표 변환을 사용해, 텍스처 좌표의 단일 세트를 복수의 텍스처 스테이지에서의 다양한 목적을 위해서(때문에) 재이용할 수 있다.

텍스처 좌표 변환의 설정과 취득

애플리케이션으로 지오메트리에 사용하는 행렬과 같이,IDirect3DDevice8::SetTransformIDirect3DDevice8::GetTransform 메서드를 호출해 텍스처 좌표 변환을 설정 및 취득할 수 있다. 이러한 메서드는, 텍스처 스테이지 0 ~ 7 의 변환 행렬을 각각 식별하는,D3DTRANSFORMSTATETYPE 열거형의 D3DTS_TEXTURE0 ~ D3DTS_TEXTURE7 멤버를 받는다.

다음 코드는, 텍스처 스테이지 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 용의 변환 행렬 세트를 적용해, 변환 후의 텍스처 좌표의 최초의 2 개의 요소를 래스터라이저에 건네주도록(듯이) 시스템에 지시한다.

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 );

이 예에서는, 3 개의 텍스처 좌표 요소를 래스터라이저에 건네주도록(듯이) 시스템에 알린다. 래스터라이저에서는, 최초의 2 개의 요소를 3 번째의 요소로 나눗셈 해, 텍스처의 처리에 필요한 2D 텍스처 좌표를 생성한다.



© 2002 Microsoft Corporation. All rights reserved.
↑TOP