Skip to content

Positionable_camera

Hyoj-Kim edited this page Apr 18, 2022 · 3 revisions
Screen Shot 2022-03-29 at 6 50 31 PM

Camera-space Coordinate

카메라는 기본 좌표계와 다른 자체 좌표계를 가진다.

.rt 파일에서 받는 카메라가 바라보는 방향을 기준으로, 반대방향으로 표현되는 w축을 만들어주자.

이 w축이 카메라 좌표계를 만드는 기본 재료가 되는 것이다.

초록색 방향벡터 t는 카메라의 위쪽 방향을 정의하는 기본값이다. (0, 1, 0)

사람으로 비유하면 3차원에서 기본적으로 서 있을 때의 기본 머리방향이라고 할 수 있다.


만약 w가 t와 같은 방향을 가지게 되는 상황이라면, 외적이 0이 되버리는 참사가 생기므로 이 때는 t의 방향을 수정해주어야 한다.

비유하자면 사람이 위를 쳐다보기 위해 고개를 들면 머리의 방향이 바뀌는 것으로 볼 수 있다.

(0, 0, 1)과 같은 값으로 변경해서 좌표계를 계산해주면 어느 방향이든 카메라 좌표계를 만들어낼 수 있다.


계산은 간단하다. w축을 기준으로 외적해주는 것이 끝!

Screen Shot 2022-03-29 at 6 56 02 PM

여기서 모든 벡터는 단위벡터로 계산되어야 한다는 사실을 잊지 말자.


FOV (Field of view)

카메라 화각은 말 그대로 볼 수 있는 영역(각도)를 의미한다.

minirt에서는 이 각도를 수평방향으로 적용하고 있다.


-w 방향을 비추는 카메라를 예로 들면, 수평방향으로 볼 수 있는 범위는 tan(𝞱 / 2)로 계산할 수 있다.

이를 양쪽에 적용해서 2를 곱한 값이 최종 폭이 된다.


이 값과 위에서 구한 카메라 좌표계를 종합해보면 카메라가 임의의 위치, 임의의 방향을 바라보고 있는 상황을 코드로 구현할 수 있게 된다!