3D 그래픽스를 다룰 때, 객체를 화면에 렌더링하기 위해 여러 개의 좌표계를 거쳐 변환하는 과정이 필요하다.

이 글에서는 3D 좌표계의 개념을 정리하고, 월드 좌표에서 NDC를 거쳐, 레스터 좌표로 변환하는 과정을 중점적으로 작성해 보려한다.

3D 그래픽스에서 사용되는 주요 좌표계

3D 모델을 화면에 올바르게 표시하기 위해서는 아래와 같은 좌표계를 변환하는 과정이 필요하다.

  • 모델 좌표(Model Coordinates)

    • 3D 모델 자체의 로컬 좌표

    • 모델링 소프트웨어에서 정의된 원래의 위치와 크기를 가진다.

  • 세계 좌표(World Coordinates)

    • 모델이 전체 3D 공간에서 차지하는 위치를 나타낸다.
    • 이동(Translation), 회전(Rotation), 크기 조정(Scaling) 등의 Transform이 적용된다.
  • 뷰 좌표(View Coordinates)

    • 카메라(관찰자)의 위치를 기준으로 변환된 좌표계
    • 카메라의 방향과 위치를 고려하여 모델의 좌표를 변환한다.
  • 클립 좌표(Clip Coordinates)

    • 투영 변환(Projection Transformation)을 거친 후의 좌표계
    • 원근법(Perspective)이나 직교(Orthographic) 투영을 적용한 결과다.
  • 정규화된 장치 좌표(Normalized Device Coordinates, NDC)

    • 클리핑(Clipping)(near, far) 과정을 거친 후, 3D 좌표를 일정한 범위 [-1, 1] x [-1, 1] x [-1, 1] 로 정규화한 좌표다.
    • DirectX에서는 x, y 좌표의 범위는 [-1,1], z 좌표의 범위는 [0,1]이다.
  • 스크린(레스터) 좌표(Raster or Screen Coordinates)

    • 실제 화면(모니터)의 픽셀 좌표로 변환된 값
    • 해상도(1920x1080 등)에 맞춰 조정된다.

월드 좌표 → NDC → 레스터 좌표

주요 좌표 변환 과정

  • 월드 좌표 → NDC 변환

    • point.x 값을 화면의 종횡비(Aspect Ratio)로 나누어 조정.

    • 결과적으로 NDC 좌표계의 x 범위(-1,1)로 변환됨.

  • NDC → 레스터 좌표 변환

    • NDC 범위 (-1,1)을 화면 픽셀 좌표로 변환.
    • y 좌표는 상하 반전됨.

주요 연산

  • NDC 변환 (x 좌표 보정)

    image-20250306190520162

  • 레스터 좌표 변환

image-20250306190559269

여기서,

image-20250306190623700

예제 계산

설정값

  • 화면 해상도: 1920 x 1080
  • 월드 좌표 예제: (0.5, 0.5, 0), (-0.5, -0.5, 0), (1, 1, 0), (-1, -1, 0)

변환 과정

1) 화면 비율 (Aspect Ratio)

image-20250306190646062

2) 월드 좌표 → NDC 변환

image-20250306190700433

월드 좌표 (x, y) 변환된 NDC (x, y)
(0.5, 0.5) (0.281, 0.5)
(-0.5, -0.5) (-0.281, -0.5)
(1, 1) (0.562, 1.0)
(-1, -1) (-0.562, -1.0)

3) NDC → 레스터 좌표 변환

3.1 스케일 값 계산
image-20250306190713294
3.2 레스터 좌표 변환 공식 적용

image-20250306190731928

NDC (x, y) 변환된 레스터 (x, y)
(0.281, 0.5) (1231.2, 269.2)
(-0.281, -0.5) (690.9, 810.8)
(0.562, 1.0) (1481.7, -0.5)
(-0.562, -1.0) (438.2, 1079.5)

태그: ,

카테고리:

업데이트:

댓글남기기