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

뷰 변환


여기에서는 뷰 변환의 기본적인 개념을 소개해, Microsoft® Direct3D® 애플리케이션으로 뷰 변환 행렬을 설정하는 방법에 대해 자세하게 설명한다. 설명하는 주제는 다음과 같다.

뷰 변환이란 무엇인가?

뷰 변환이란, 월드 공간에 시점을 배치해, 정점을카메라 공간에 변환 하는 처리이다. 카메라 공간에서는 카메라 (즉 시점)는 원점에 있어, z 축의 정방향을 바라본다. Direct3D 에서는 왼손 좌표계를 사용하기 (위해)때문에, z 는 장면(scene)의 정방향을 바라본다. 뷰 행렬은, 월드내의 개체를 카메라의 위치 (카메라 공간의 원점)와 방향을 기본으로 재배치한다.

뷰 행렬은 많은 방법으로 생성 할 수 있다. 모든 방법에 대해, 카메라는 월드 공간내에서 몇개의 논리 위치와 방향을 갖는다. 이러한 위치와 방향은, 장면(scene)내의 모델에 적용하는 뷰 행렬을 생성 할 때의 시점이 된다. 뷰 행렬은, 개체를 평행이동 및 회전해, 카메라를 원점으로 한 카메라 공간내에 배치한다. 뷰 행렬을 생성 하는 방법으로서는 평행이동 행렬과 각 축으로 대하는 회전 행렬을 조합하는 방법이 있다. 이 방법에서는 다음의 일반적인 행렬식이 적용된다.

뷰 변환

이 식에서는 V 는 생성 하는 뷰 행렬, T 는 월드내의 개체를 재배치하는 평행이동 행렬, Rx ~ Rz 는 x, y, z 축으로 따라 개체를 회전하는 회전 행렬이다. 이 평행이동 행렬과 회전 행렬은, 월드 공간에 있어서의 카메라의 논리 위치와 방향에 근거하고 있다. 따라서, 월드에 있어 카메라의 논리 위치가 <10, 20,100> 의 경우, 평행이동 행렬은, x 축으로 따라 -10 단위, y 축으로 따라 -20 단위, z 축으로 따라 -100 단위만 개체를 평행이동 하게 된다. 이 식에 있어서의 회전 행렬은, 카메라의 방향에 근거하고 있어 카메라 공간의 축이 월드 공간으로부터 어느 정도 회전하는지를 나타낸다. 예를 들어, 위에의 예의 카메라가 바로 밑을 향하고 있는 경우, 다음 그림이 나타내듯 카메라 공간의 z 축은 월드 공간의 z 축으로부터 90 번 (π/2 라디안)만 어긋난다.

뷰 공간 (view space)

회전 행렬은, 크기는 같아이지만 방향이 역의 회전을, 장면(scene)내의 모델에 적용한다. 이 카메라에 대한 뷰 행렬은, x 축을 중심으로 했다 -90о의 회전을 포함한다. 회전 행렬과 평행이동 행렬을 조합하는 것으로, 장면(scene)내의 개체의 위치와 방향을 조정하는 뷰 행렬을 생성 해, 개체의 위쪽에 카메라를 두어 모델을 위로부터 내려다 볼 수가 있다.

뷰 행렬의 설정

D3DXMatrixLookAtLHD3DXMatrixLookAtRH 헬퍼-함수는 카메라 위치 및 주시점에 근거해 뷰 행렬을 생성 한다.

다음 샘플 코드에서는 오른손 좌표계의 뷰 행렬을 생성 하고 있다.

D3DXMATRIX out;
D3DXVECTOR3 eye(2,3,3);
D3DXVECTOR3 at(0,0,0);
D3DXVECTOR3 up(0,1,0);
D3DXMatrixLookAtRH(&out, &eye, &at, &up);

Direct3D 에서는 설정된 월드 행렬 및 뷰 행렬을 사용하여 몇개의 내부 데이터 구조를 구축한다. 새로운 월드 행렬 또는 뷰 행렬을 설정할 때마다, 관련된 내부 구조가 재계산된다. 이러한 행렬을 빈번하게 설정 하면, 계산에 시간이 걸린다. 필요한 계산을 최소한으로 억제하려면 , 월드 행렬과 뷰 행렬을 연결해 월드 뷰 행렬을 생성 해, 그것을 월드 행렬로서 설정한 다음에, 뷰 행렬을 단위행렬로 설정한다. 월드 행렬 및 뷰 행렬의 각 캐쉬 복사는 보관 유지해 두는 것. 필요에 따라서 월드 행렬을 수정·연결·리셋 할 수 있다. 샘플에서는 간결한 것을 우선해, 이 최적화는 거의 이용하지 않았다.



© 2002 Microsoft Corporation. All rights reserved.
↑TOP