뷰 공간
월드 공간은 굉장히 넓은 영역이다. 이 영역을 다 보여줄 순 없고, 플레이어가 특정 원하는 지점을 보여줘야 하는데
이러한 화면을 보여주기 위해 하나의 '가상 카메라' 가 있다고 생각하는 것이다.
화면에 대응하는 카메라를 만들고 이 카메라를 중심으로 화면이 보이도록 해야한다.
이를 위해서는 카메라를 중심으로 물체의 정보를 재조정하는 작업이 필요하는데, 카메라를 중심으로 변환한 공간을 뷰 공간 (View Space) 라고 한다.
사실 뷰 변환이라는건 별거 없다.
모든 정점을 '카메라 위치로 재변환' 하는것인데 이를 다르게 생각해보면
1. 카메라를 원점으로 보낸다
2. 원점으로 보낸 변환을 모든 오브젝트에 적용한다
-> 카메라는 원점에 있으며 모든 오브젝트는 카메라의 변환만큼 카메라와 동일하게 이동했다.
가 되는것이다.
즉 카메라에 적용된 월드변환의 역행렬을 모든 오브젝트에 적용시키면
카메라는 원점에 있으면서, 모든 오브젝트가 카메라의 공간에 온 것처럼 되는 것이다.
예) 카메라가 (-10, -10)에 있고, 오브젝트가 (10, 10) 에 있다고 생각해보자
카메라가 원점으로 돌아가려면 (x, y) 에 10씩 더해주면 된다.
그럼 카메라가 (0, 0) 일때 오브젝트는 (20, 20) 에 있게 되고, 거리는 카메라가 원점으로 돌아가기 전과 동일하다.
이 개념을 가지고 뷰 공간으로 변환해주는 뷰 행렬을 설계해보자.
카메라는 크기의 개념이 없기때문에, 카메라는 회전과 이동만으로 구성된다.
카메라의 이동행렬의 역행렬은 다음과 같다
$$\begin{bmatrix}
1 & 0 & 0 & 0\\
0 & 1 & 0 & 0\\
0 & 0 & 1 & 0\\
-Tx & -Ty & -Tz & 1
\end{bmatrix}$$
덧셈의 역원인 반대수를 생각해보면 이동행렬의 역행렬은 당연하다.
다음은 카메라의 회전행렬의 역행렬이다.
일단 카메라의 회전행렬이 다음과 같다고 생각해보자
$$ \begin{bmatrix}
Xx & Xy & Xz & 0\\
Yx & Yy & Yz & 0\\
Zx & Zy & Zz & 0\\
0 & 0 & 0 & 1
\end{bmatrix}$$
회전행렬의 역행렬은 전치행렬이라는것을 알아야 한다.
( -theta 만큼 회전했다고 생각했을 때, 삼각함수의 성질을 생각하면 sin(-theta) 부분들은 다 -sin(theta)가 된다. 이를 2차원 회전 변환에 대해서 생각해보면, 전치행렬이다. )
즉 회전행렬의 역행렬은 다음과 같다.
$$\begin{bmatrix}
Xx & Yx & Zx & 0\\
Xy & Yy & Zy & 0\\
Xz & Yz & Zz & 0\\
0 & 0 & 0 & 1
\end{bmatrix}$$
우리가 기존에 아핀 변환 행렬은 SRT 로 만들었다.
역행렬은 순서가 반대가 되어야 하므로
$$V_{view} = T^{-1}R^{-1} $$
$$V_{view} =
\begin{bmatrix}
1 & 0 & 0 & 0\\
0 & 1 & 0 & 0\\
0 & 0 & 1 & 0\\
-Tx & -Ty & -Tz & 1
\end{bmatrix}
\begin{bmatrix}
Xx & Yx & Zx & 0\\
Xy & Yy & Zy & 0\\
Xz & Yz & Zz & 0\\
0 & 0 & 0 & 1
\end{bmatrix}
=
\begin{bmatrix}
Xx & Yx & Zx & 0\\
Xy & Yy & Zy & 0\\
Xz & Yz & Zz & 0\\
-dot(T, X) & -dot(T, Y) & -dot(T, Z) & 1
\end{bmatrix}$$
라는 결과가 나온다.
(여기서 dot은 T와 각 X, Y, Z요소가 곱해지면 내적과 동일함을 의미한다.)
'Graphics > 이론' 카테고리의 다른 글
아핀 결합 ( Affine Combination ) (0) | 2022.12.21 |
---|---|
원근 투영 변환 - 깊이값( Perspective projection transformation - Depth ) (1) | 2022.11.17 |
원근 투영 변환 ( Perspective projection transformation ) (4) | 2022.11.14 |
오일러 변환 (Euler Transformation) (0) | 2022.10.31 |
월드 변환 ( World Transformation ) (0) | 2022.10.23 |