한 점으로부터 물체를 바라보는 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시켜 구할 수 있다.
'수업정리 > 컴퓨터 그래픽스' 카테고리의 다른 글
컴퓨터 그래픽스 수업정리) 11_Curves (0) | 2023.01.15 |
---|---|
컴퓨터 그래픽스 수업정리) 10_Kinematics & Animation (0) | 2023.01.15 |
컴퓨터 그래픽스 수업정리) 9_Orientation & Rotation (0) | 2023.01.15 |
컴퓨터 그래픽스 수업정리) 8_Hierarchical Modeling (0) | 2023.01.15 |
컴퓨터 그래픽스 수업정리) 7_Lighting & Shading (0) | 2023.01.15 |