본문 바로가기

Graphics Note

perspective projection

카메라 좌표계로 표현되는 오브젝트를 화면에 표현하기 위해 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