카메라 좌표계로 표현되는 오브젝트를 화면에 표현하기 위해 2D의 평면으로 투영하는 것을 projection이라 한다. 세부적으로 구분하여 단순히 수직으로 투영하는것을 orthogonal projection, 원근감 있는 투영을 perspective projection이라 한다.
일반적으로 카메라는 z-축 방향으로 바라보며 y-축 방향이 위를 나타내고 (오른손좌표계를 따라서) 왼쪽이 x-축으로 표현된다.
오브젝터의 투영 과정은 오브젝트의 한 정점이 카메라 좌표 z-축 위의 한 평면 z=d에 투영하는것으로 시작한다. 같은 방법으로 모든 정점들에 대해 투영하는것이다.
삼각형의 닮음비를 기억한다면 어렵지 않을것이다.
위 그림처럼 원점과 투영될 정점, 원래 위치의 정점 및 z-축위의 점들이 이루는 삼각형은 닮음이며 이로부터 투영될 점을 구할 수 있다.
[math!]\begin{aligned}d : z_c &= -x_p : x_c \\ \therefore x_p &= -\frac{x_c}{z_c/d} \end{aligned}[/math!]
투영되는 정점의 x좌표에 -부호를 붙이는 이유는 투영되는 좌표계가 카메라 좌표계와 반대되는 x축을 가지고있기 때문이다. (왼손좌표계라면 같은 부호를 가진다.)
y축의 투영되 x-축으 투영과 동일하다.
[math!]\begin{aligned} d:z_c &= y_p : y_c \\ \therefore y_p &= \frac{y_c}{z_c/d}\end{aligned}[/math!]
이를 매트릭스로 표현하면
[math!]\begin{bmatrix}x_p\\y_p\\z_p\\w\end{bmatrix} = \begin{bmatrix}-1&0&0&0\\0&1&0&0\\0&0&1&0\\0&0&1/d&0\end{bmatrix}\begin{bmatrix}x_c\\y_c\\z_c\\1\end{bmatrix}[/math!]
와 같으며, 동차좌표계임을 기억한다면 정점이 제대로 투영될것임을 알 수 있을것이다.
동차좌표계를 카르테시안 좌표계로 나타내어 최종 투영된 좌표를 구할 수 있다.
[math!]\begin{bmatrix}x_p\\y_p\\z_p\\w\end{bmatrix} = \begin{bmatrix}-x_c\\y_c\\z_c\\z_c/d\end{bmatrix} \rightarrow \begin{bmatrix}\frac{-x_c}{z_c/d}\\\frac{y_c}{z_c/d}\\d\\1\end{bmatrix}[/math!]
참고 : Mathematics for computer graphics 3rd / John Vince
'Graphics Note' 카테고리의 다른 글
Delaunay triangulation in 2D (1) | 2013.10.06 |
---|---|
외곽선 검출 (0) | 2013.08.27 |
[Mathematics] rotate model using quaternion (4) | 2013.07.11 |
[Mathematics] quaternion(사원수) (1) | 2013.07.10 |
[Mathematics] matrices for transformation (0) | 2013.07.09 |