[DX] 투영 변환(Projection transform)

김진우·2025년 7월 11일

DirectX

목록 보기
19/32
post-thumbnail

정의

투영 변환(Projection transform)은 3D 공간의 점을 2D 화면 공간(NDC)으로 변환하는 과정이다.

보통 View 공간(View Space)에서 투영 공간(Clip Space)으로 변환할 때 적용한다.
이로 인해 원근(perspective)이나 직교(orthographic)효과가 생긴다.

종류

원근 투영(Perspective Projection) : 카메라처럼 멀리 있는 물체가 작게 보인다.(원근감)
직교 투영(Orthographic Projection) : 모든 물체가 거리와 관계없이 같은 크기로 보인다.


원근 투영 행렬 (Perspective Projection Matrix, LH)

주요 파라미터

  • FOV: 수직 시야각 (보통 라디안)
  • Aspect Ratio: 화면 비율 (가로 / 세로)
  • Near (n): 가까운 절두체 평면
  • Far (f): 먼 절두체 평면

왼손 좌표계 기준 투영 행렬

P=[1aspecttan(θ/2)00001tan(θ/2)0000ffnnffn0010]P = \begin{bmatrix} \frac{1}{\text{aspect} \cdot \tan(\theta/2)} & 0 & 0 & 0 \\ 0 & \frac{1}{\tan(\theta/2)} & 0 & 0 \\ 0 & 0 & \frac{f}{f - n} & -\frac{n \cdot f}{f - n} \\ 0 & 0 & 1 & 0 \end{bmatrix}

특징

  • Z축이 앞으로(+) 향하는 좌표계 기준에 맞게,
    • z 요소는 +1 (OpenGL은 -1)
    • 투영된 z값은 [0, 1] 범위로 정규화된다. (NDC z 범위)

직교 투영 행렬 (Orthographic Projection Matix, LH)

주요 파라미터

  • Left (l), Right (r)
  • Top (t), Bottom (b)
  • Near (n), Far (f)

왼손 좌표계 기준 직교 투영 행렬

P=[2rl00r+lrl02tb0t+btb001fnnfn0001]P = \begin{bmatrix} \frac{2}{r - l} & 0 & 0 & -\frac{r + l}{r - l} \\ 0 & \frac{2}{t - b} & 0 & -\frac{t + b}{t - b} \\ 0 & 0 & \frac{1}{f - n} & -\frac{n}{f - n} \\ 0 & 0 & 0 & 1 \end{bmatrix}

특징

  • Z 값이 0 (near) ~ 1 (far) 로 정규화된다.(DirectX 기준)
  • 직교 투영에서는 원근감 없이 평면처럼 보인다.

0개의 댓글