[DX9] 3.행렬의 사용방법 2 – 뷰 트랜스폼 행렬 정의

뷰 트랜스폼 행렬은 뷰의 위치와 회전을 정의합니다. 뷰 행렬은 신에 대해서 사용되는 카메라 입니다.

다음 코드는 뷰 트랜스폼 행렬을 작성해 Direct3D 디바이스에 대한 현재의 뷰 트랜스폼을 설정합니다.

D3DXVECTOR3 vEyePt   ( 0.0f, 3.0f,-5.0f );
D3DXVECTOR3 vLookatPt( 0.0f, 0.0f, 0.0f );
D3DXVECTOR3 vUpVec   ( 0.0f, 1.0f, 0.0f );
D3DXMATRIXA16 matView;
D3DXMatrixLookAtLH( &matView, &vEyePt, &vLookatPt, &vUpVec );
g_pd3dDevice->SetTransform( D3DTS_VIEW, &matView );

처음에는 D3DXMatrixLookAtLH 를 호출해 뷰 행렬을 정의합니다. 첫번째 파라메터는 연산의 결과가 되는 D3DMATRIX 구조체로의 포인터입니다. 두번째, 세번째, 네번째 파라메터는 각각 시점(eye point), 주시점(look-at point), “위쪽(up)” 방향을 정의 합니다.  여기에서 시점은 z축에 따라 5단위(unit) 복귀, 3단위 상승하도록 설정되어있습니다. 주시점은 원점으로 설정되어있습니다. “위쪽” 방향은 y 방향으로 정의 되어있습니다.

다음에는 IDirect3DDevice9::SetTransform 를 호출해 Direct3D 디바이스에 대한 뷰 트랜스폼을 설정합니다. IDirect3DDevice9::SetTransform 에 넘긴 첫번째 파라메터에 의해 설정한 트랜스폼을 Direct3D에 지시합니다. 이 샘플에서는 D3DTS_VIEW 플래그를 사용해 설정할 필요가 있는 뷰 트랜스폼을 지정합니다. 두번째 파라메터는 현재의 트랜스폼으로 설정된 행렬로의 포인터입니다.

뷰 트랜스폼의 자세한 사항은 「뷰 트랜스폼 (Direct3D 9)」을 참조해 주세요.

신에 대한 월드 트랜스폼을 정의하면 사영 트랜스폼 행렬(projection transform matrix)을 사용할 수 있게 됩니다. 이 경우도 트랜스폼을 정의하는 순서는 중요하지 않습니다. 다만, Direct3D 는 다음 순서로 신에 행렬을 적용합니다.

  1. 월드(World) 
  2. 뷰 (View)
  3. 사영 (Projection)

사영 트랜스폼 행렬의 정의에 대해서는「 3 – 사영 트랜스폼 행렬 정의」를 참조해 주세요.

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.