3D 프로젝트를 하기에 앞서 우리가 무엇을 해야 하는지 정리해본다.

3D에 필요한 것은 무엇일까? -> Camera: 카메라 -> Object Library: 오브젝트를 보관하는 공간. 배경에 오브젝트를 배치하기 전에 필요하다. -> Background: 우리의 오브젝트들이 배치되는 배경이다. -> Other Functions…

그렇다면 가장 중요한 것은 카메라인데, 카메라가 단순히 3D 모델을 바라보는 것은 어렵지 않다. 그것은 단순히 2D를 보는 것에 불과하니까. 하지만 카메라의 좌표에 따라 보는 각도가 달라지는 것은 다른 이야기다.


시점

먼저, 시점(($Camera_{pos}$))을 정의해야 한다. 시점은 카메라의 위치 좌표다. 3D 공간의 점 $P(x, y, z)$를 2D 화면 좌표로 변환할 때, 카메라의 위치 변화에 따른 시각적 왜곡은 다음의 원리를 따른다.

  1. 거리 기반 스케일링 (Distance Scaling) 가장 기본적인 원칙은 “멀어지면 작아지고, 가까워지면 커진다”는 점이다. P screen ∝ d1 카메라와 물체 사이의 거리(d)가 멀어질수록 화면에 그려지는 크기는 그 거리에 반비례해서 줄어든다. 예를 들어, camera_x, camera_y, camera_z 좌표가 x = 10, y = 10, z = 0이라고 가정하자, 오브젝트는 초록색 상자가 있다. 초록색 상자의 크기는 x = 0부터 1, y = 0부터 1, z = 0부터 1이다. 그렇다면 우리는 크기 1의 세제곱인 초록색 상자를 9의 거리에서 평행하게 바라보고 있는 형태일 것이다. 여기서 우리는 시점은 고정한 상태로, z축의 위치를 계속 상승시킨다고 한다면?

상자를 바라보는 각도가 변하면서 윗면이 넓게 보이게 되고, 가까운 모서리는 천천히 작아지고, 먼 쪽 모서리는 더 빨리 작아진다.

이는 투영 행렬을 따른다.

\[P_{screen} \propto \frac{1}{d}\]

주시점과 시선 벡터

카메라가 바라보는 주시점($Target_{pos}$) 또한 정의해야 한다. 주시점은 카메라가 바라보는 지점의 위치 좌표다. 그리고 시점과 주시점 사이의 시선 벡터(View Vector) 또한 필요하다.