Super Kawaii Cute Cat Kaoani direction vector, up vector가 주어졌을 때, viewing matrix 구하는 방법

수업정리/컴퓨터 그래픽스

direction vector, up vector가 주어졌을 때, viewing matrix 구하는 방법

치킨고양이짱아 2024. 9. 30. 21:38
728x90
728x90

한 점으로부터 물체를 바라보는 direction vector, up vector가 주어졌을 때, viewing matrix를 어떻게 구할 수 있을까?

viewing matrix란?

일단, viewing matrix가 무엇인지부터 알아보자. viewing matrix M_v는 world space 상의 좌표인 p_w를 camera space상의 좌표인 p_v로 바꿔주는 matrix이다. (즉, p_v = M_v @ p_w가 성립하는 matrix이다.)

 

어떠한 방식으로 구할 수 있을까?

object space 상의 좌표를 world space상의 좌표로 바꿔주기 위해

p_w = (object space를 world space상에서 표현한 matrix) @ p_o가 성립했던 것을 떠올리면,

p_w = (camera space를 world space상에서 표현한 matrix) @ p_v가 성립하고,

p_v = (camera space를 world space상에서 표현한 matrix).inv @ p_w가 성립하는 것을 알 수 있다.

 

현재 우리가 알고 있는 것은, 한 점으로부터 물체를 바라보는 direction vector와 up vector이다. 이 값들은 world space 상에서 표현이 되어 있다.

direction vector는 카메라에서 물체를 바라보는 방향으로, z축 방향을 의미한다. 즉,

V_z (world space상에서 표현된 camera space의 z축) = direction_vector / |direction_vector|

이 성립한다.

x축은 up vector와 z축의 외적으로 구할 수 있다.

V_x (world space상에서 표현된 camera space의 x축) = ((up vector) x V_z) / |(up vector) x V_z|

y축은 z축과 x축의 외적으로 구할 수 있다.

 

이렇게 world space상에서 표현된 camera space의 x, y, z축을 다 구했다. 그럼 world space상에서 표현된 camera space를 다음과 같이 정의할 수 있다. 카메라의 위치를 P_c라고 할 때,

[[V_x[0], V_y[0], V_z[0], P_c[0]],

[V_x[1], V_y[1], V_z[1], P_c[1]],

[V_x[2], V_y[2], V_z[2], P_c[2]],

[0., 0., 0., 1]]

 

viewing matrix는 위의 matrix를 inverse시켜 구할 수 있다.

728x90
728x90