Homogeneous Coordinates를 왜 쓸까?
Homogeneous Coordinates에 대한 정리
수학적으로 $Homogeneous \ Coordinates$를 왜 쓰는지 이해는 못했다. 하지만 실용적으로 어떤 편의를 위해서 쓰는지는 알겠다. 검색하면서 정리한 여러 사용법에 대해서 적어보고자 한다.ㅠㅠ
Homogeneous Coordinate란 무엇인가?
n차원의 좌표를 n+1개의 좌표로 나타내는 것이다. 3차원의 좌표는 $(X, Y, Z)$로 나타내지만 $Homogegeous \ Coordinate$는 한 차원($W$)을 더 추가해서 좌표를 표현한다. 여기서 기하학적으로는 $W$는 원근감을 조절하는 역할을 하게 된다. $W = 1$ 이면 아무런 크기의 변화가 없게 된다.
$ (1, 2, 3) $의 $Homogeneous \ Coordinate$ 표현은 $(1h, 2h, 3h, h)$이다.
$(1w, 2w, 3w, w) = (1, 2, 3, 1) = (2, 4, 6, 2)$ 전부 3차원의 $(1, 2, 3)$ 좌표와 동치이다.
Matrix의 곱셈으로는 모든 Transfromation을 표현할 수 없다.
$Translation$은 보통 $Vector$의 덧셈으로 표현한다. 회전 변환처럼 하나의 $Matrix$만으로 표현할 수는 없을까?
$Affine \ Matrix$ $(Transformation + Translation)$은 다음과 같이 표현할 수 있다.
$X' = MX + T$ ($T$는 $Vector$, $M$은 $Matrix$)
Translation을 하나의 $Matrix$로 표현하지 못해서 $Vector \ T$로의 $Vector$ 덧셈으로 표현했다.
$Homogeneous \ Coordinate$를 사용하면 Translation을 위한 $Vector$ 덧셈을 대신 아래와 같이 하나의 $Matrix$ 곱셈으로 Translation을 표현할 수 있다.
$ TranslationMatrix = \begin{bmatrix} 1 & 0 & 0 & a \\ 0 & 1 & 0 & b \\ 0 & 0 & 1 & c \\ 0 & 0 & 0 & 1 \end{bmatrix} $
그래서 $Homogeneous \ Coordinate$를 사용하면 모든 $Transformtaion$을 하나의 $Matrix$ 곱셈으로 표현할 수 있다.
$Affine \ Matrix$를 $Homogeneous \ Coordinate$로 표현해보자.
$ X = \begin{bmatrix} M & 0 \\ 0 & 1 \end{bmatrix} $
$ T = \begin{bmatrix} I & T \\ 0 & 1 \end{bmatrix} $
$ AffineMatrix = TX = \begin{bmatrix} M & T \\ 0 & 1 \end{bmatrix} $
W의 용도
Translate 하지 않을 용도일 때는 (W = 0)
$W$가 $0$인 $(1, 2, 3, 0)$인 $Vector \ A$에 Translate하는 $Matrix \ T$를 곱해보자.
$ T = \begin{bmatrix} 1 & 0 & 0 & a \\ 0 & 1 & 0 & b \\ 0 & 0 & 1 & c \\ 0 & 0 & 0 & 1 \end{bmatrix} $
$ A = \begin{bmatrix} 1 \\ 2 \\ 3 \\ 0 \end{bmatrix} $
$ TA = \begin{bmatrix} 1+a\times0 \\ 2+b\times0 \\ 3+c\times0 \\ 1\times0 \end{bmatrix} $
$W$가 0이기 때문에 $(a, b, c)$로 이동하는 $Translate \ Matrix$를 무시하게 됐다.
그리고 어떤 좌표의 $W$를 $0$으로 가까이 가게하면 모든 좌표가 무한대로 발산한다. 그래서 이동하지 않는 Direction과 같은 것을 나타내는 벡터는 $W = 0$이다.
Translate할 용도일 때는 (W = 1)
$W$가 1인 $(1, 2, 3, 1)$인 $Vector \ B$에 Translate하는 $Matrix \ T$를 곱해보자.
$ T = \begin{bmatrix} 1 & 0 & 0 & a \\ 0 & 1 & 0 & b \\ 0 & 0 & 1 & c \\ 0 & 0 & 0 & 1 \end{bmatrix} $
$ B = \begin{bmatrix} 1 \\ 2 \\ 3 \\ 1 \end{bmatrix} $
$ TB = \begin{bmatrix} 1+a\times1 \\ 2+b\times1 \\ 3+c\times1 \\ 1\times1 \end{bmatrix} $
$W$가 1이기 때문에 $1\times(a, b, c)$만큼 Translate했다.
이와 같이 $W$가 $1$이면 같은 비율을 유지하는 것을 확인할 수 있다. 그래서 주로 $W$를 $1$로 사용하는 것이다.
$Position$은 이동을 할 수 있다. 그래서 $Position$으로는 주로 $W = 1$을 사용한다. $W$ 요소를 크게 바꾸면 이동시키는 영향을 크게 줄 수 있다.
원근감을 적용할 용도일 때는 (W=z)
$Homogeneous \ Coordinate$를 사용하면 원근감을 표현하기 쉽다.
$Pure \ Perspective \ Project$에 대해서 설명해보겠다. 아래의 $Matrix \ M$를 살펴보자. 이 $Matrix$의 3번째 $Vector$의 $W$요소는 $1$이다.
$ M = \begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 1 & 0 \end{bmatrix} $
$ P = \begin{bmatrix} x \\ y \\ z \\ 0 \end{bmatrix} $
$ MP = \begin{bmatrix} x \\ y \\ z \\ z \end{bmatrix} $
3번째 $Vector$의 $W$요소의 값을 $1$로 설정하면, 곱해주는 $Vector$의 $W$요소를 z로 만들어준다. 그렇기 때문에 위의 연산처럼 $Vector \ P$에 $Matrix \ M$을 곱해주면 원래 $0$이있던 $P$의 $W$요소가 $z$가 된다. ($MP$처럼 $W$요소가 $1$이 아닐 때 $Clip \ Space$에 있다고 말한다.)
$Clip \ Space$에 있는 $MP$를 우리가 사용하는 평면인 $W = 1$인 곳으로 가져와서 어떤 좌표인지 해석해보자. $W$요소를 $1$로 만들어 보자.
$ MP/z = \begin{bmatrix} x/z \\ y/z \\ z/z \\ z/z \end{bmatrix} = \begin{bmatrix} x/z \\ y/z \\ 1 \\ 1 \end{bmatrix} $
이 된다. 결과를 보면 $z$가 $1$보다 크면 $x$와 $y$가 $z$만큼 나눠져서 z가 클수록 값이 더 작아진다는 사실을 알 수 있다. 위의 사실을 이용하면 $W$요소의 값을 조정해서 원금감과 표현할 수 있다.