상세 컨텐츠

본문 제목

개념 3D 이해 4.뷰 변환

프로그래밍/3D

by ∫2tdt=t²+c 2008. 11. 13. 14:21

본문

원래는 전 글에서 변환 설명을 다 끝내려고 했는데 길어져서 나누어버렸다.
우리의 현재 목표는 3차원상의 물체를 카메라에서 보이는 대로 화면에 표현하는 것이다.
이것을 저번 편에서 배웠던 행렬 변환을 이용해서 만들어보자.

가장 먼저 할일!
입장바꿔 생각해보기(易地思之).

먼저 Direct3D상에서는 x축이 모니터에서 오른쪽으로 뻗어나가는 방향이고,
y축이 모니터에서 위쪽으로 뻗어나가는 방향이고
z축이 모니터 안쪽으로 들어가는 방향이다.
(Direct3D를 예로 들어 설명한 이유는 가장 많이쓰이기 때문이다. OpenGL이나 또 다른 3D API에서는 축을 다르게 잡는다.)
그리고 모니터의 정 중앙이 원점(0,0,0)이 된다.

그럼 카메라가 볼때 원점은 어디가 될까?
바로 자기 자신의 위치가 원점이 될 것이다.

상황을 정리해보자
카메라는 (Cx,Cy,Cz)의 위치에 있고, (Vx,Vy,Vz)지점을 보고 있다고 하자.
우리는 카메라의 입장에서 세상을 봐야한다.
즉 (Cx,Cy,Cz)지점이 (0,0,0)이 되도록 해야한다.
그럼 먼저 (-Cx,-Cy,-Cz)만큼 평행이동을 하자.

그럼 카메라의 위치는 (0,0,0)이 되고, 보고 있는 지점은 (Vx-Cx,Vy-Cy,Vz-Cz)가 된다.
이제 해결해야할것은 보는 방향이다. 우리는 지금 앞쪽(0,0,1)을 바라보고 있지 (Vx-Cx,Vy-Cy,Vz-Cz)를 바라보고 있지 않다.

그럼 이제 (0,0,1)이 (Vx-Cx,Vy-Cy,Vz-Cz)를 바라보도록 x축 회전각도 a, y축 회전각도 b를 구하고
전체를 -a만큼 x축으로 회전시키고, -b만큼 y축으로 회전시키자. 그러면 (Vx-Cx,Vy-Cy,Vz-Cz)가 (0,0,1)이 될것이고 원점(0,0,0)은 회전시켜도 그대로 원점이므로 (0,0,0)일것이다.
z축 회전은 왜 안하느냐?
z축 회전은 카메라가 바라보는 위치랑 전혀 상관이 없다.
z축 회전이 얼만큼 되었던 카메라는 같은 위치를 바라보고 있을뿐이고
보이는것이 회전을 할뿐이다.
쉽게설명해서 우리가 서서보나 누워서 보나 물구나무서서보나 액자를 똑같이 볼 때처럼 z축 회전을 얼만큼 하던 간에 같은 곳을 바라보게 된다.

따라서 카메라가 보는 화면을 모니터에 보이게 하려면,
  • 카메라의 위치
  • 카메라가 보는 방향
  • 카메라가 어떻게 서있는가
이 세 가지 정보가 필요하다.

이 세 가지 정보를 토대로 3차원 상의 물체를 변환하면 카메라가 보는 것과 똑같은 모습의 물체를 볼수 있을것이다.
이 때 원래 물체가 있던 공간을 Model Space (모델 공간), 카메라가 보는 것과 같이 변형한 후의 공간을 View Space(뷰 공간)이라고 하고, 그 변환 과정을 뷰 변환이라고 한다.

'프로그래밍 > 3D' 카테고리의 다른 글

Direct3D에 FreeType로 폰트 출력하기  (4) 2013.04.06
개념 3D 이해 6.월드 변환  (0) 2008.12.30
개념 3D 이해 5.프로젝션 변환  (0) 2008.11.17
개념 3D 이해 3.변환  (0) 2008.11.13
개념 3D 이해 2.위치  (0) 2008.11.13
개념 3D 이해 1.삼각형  (0) 2008.11.13

관련글 더보기

댓글 영역