-
카메라의 뷰 좌표계와 LookAt 행렬 유도하기이러저런 이야기 2019. 12. 19. 10:44
카메라의 뷰 좌표계란?
카메라 좌표계, 뷰 좌표계라 하는데 전부 같은 말이며, 쉽게 말하자면 월드 좌표계가 우리가 살고 있는 공간의 한 지점을 기준으로 한 좌표계라면 카메라 좌표계는 카메라를 기준으로 한 좌표계입니다.
이제 카메라 좌표계의 방향 벡터들을 구해 보겠습니다.
제일 첫번째로 카메라의 방향을 구할려면 카메라의 위치를 알아야 하며 카메라가 원점을 바라보게 해야합니다. 그런 다음에 원점에서 카메라의 위치를 뺀다면 원점에서 카메라의 위치를 향하는 벡터를 얻을 수 있는데 이 벡터는 카메라의 음의 방향, 즉 카메라 z축의 음의 방향을 가리킵니다. 때문에 카메라의 z축 방향을 얻기 위해서는 (카메라 위치 - 카메라가 바라 보는 타켓 위치)를 해줘야 카메라 좌표계의 z축 방향을 얻을 수 있습니다.
그 다음으로는 오른쪽 벡터인 x축 방향 벡터를 구하겠습니다. 카메라의 x축 방향 벡터는 월드 좌표에서 존재하는 Up 벡터와 처음 구했던 카메라의 z 벡터를 외적해서 구합니다. 외적의 결과는 두 벡터의 수직인 벡터가 나오므로 z축에 수직인 벡터 x 축 방향 벡터를 얻을 수 있습니다. 마지막으로 y축 방향 벡터는 매우 쉽습니다. x, z축을 알고 있기 때문에 x 벡터를 구했던 것 처럼 x 벡터와 z 벡터를 외적 하면 y 벡터를 구할 수 있습니다.
마지막으로 LookAt행렬은 카메라 space를 정의하기 위한 3개의 직각인 축과 위치 벡터를 가지고 있습니다.
R은 x 벡터, U는 y 벡터, D는 z 벡터, P는 카메라의 위치 벡터입니다. 위치 벡터가 반대로 되어있는데 물체는 world 에서 이동하고, 결국 이동해야할 곳의 반대로 이동하기 때문입니다.
'이러저런 이야기' 카테고리의 다른 글
벡터의 투영 유도하기 (0) 2019.12.19 벡터의 내적 공식 유도하기 (0) 2019.12.19 오일러각 입력에 따라 Forward, Up, Right 벡터를 구하고 이를 토대로 3차원 회전 행렬 구하기 (0) 2019.12.19 [선형 변환과 행렬의 관계] (0) 2019.12.19 프리스텀 컬링 (0) 2019.12.17