본문 바로가기

게임 프로그래밍

동차 좌표

동차 좌표

 

1. 동차 좌표란?

  • 일반적인 3D 좌표: (x, y, z)
  • 동차 좌표: (x, y, z, w) 형태의 4차원 벡터
  • 이때 실제 3D 공간의 점은 다음과 같이 복원함:(wx,wy,wz)

즉, (x, y, z, w)는 (x/w, y/w, z/w)와 동일한 3D 위치를 나타냄

(단, w ≠ 0일 때)

 

 

2. 왜 동차 좌표가 필요한가?

A. 행렬 연산으로 모든 변환을 통일시키기 위해

변환 종류 일반 좌표 동차 좌표에서의 처리

회전 행렬 곱 가능 동일
스케일링 행렬 곱 가능 동일
이동 (Translation) 행렬 곱 불가능 행렬 곱 가능

일반 좌표에서는 (x, y, z) + (dx, dy, dz)로 이동하지만,

행렬만으로 이동까지 처리하려면 동차 좌표가 필요함.

 

즉, 동차 좌표는 모든 공간 변환을 행렬 곱으로 처리할 수 있게 해줌

 

B. 점과 벡터의 구분

  • 점 (Vertex): (x, y, z, 1) → 위치
  • 벡터 (Vector): (x, y, z, 0) → 방향

이동 변환 시

  • 점은 위치니까 이동해야 함 → w = 1
  • 벡터는 방향이니까 이동 안 함 → w = 0

그래서 이 w 값으로 두 개념을 수학적으로 구분 가능.

 

3. 투영에서 동차 좌표의 역할

투영 행렬 결과가 (x', y', z', w')일 때

  • 투영 행렬의 핵심 역할은 w' 값에 z값을 넣는 것
  • 왜?
    • 원근 효과를 표현하기 위해
    • z값을 w에 넣으면, 이후 모든 좌표를 z로 나누는 효과를 가짐

예시:

  • 원래 3D 점: (x, y, z, 1)
  • 투영 행렬 곱하면: (x’, y’, z’, w’ = z)
  • 마지막 단계:(x′,y′,z′)=NDC 공간

👉 z가 클수록 (멀수록) → 값이 작아져서 작게 보임

👉 z가 작을수록 (가까울수록) → 값이 커져서 크게 보임

즉, w 값으로 나누는 단계에서 원근감이 발생.

 

4. 요약

기능 동차 좌표로 가능해지는 것

이동 변환 행렬 곱으로 처리 가능
점 vs 벡터 구분 w = 1 / w = 0
투영 처리 z 값을 w에 넣고, 이후 나눗셈으로 원근감 적용
3D → 2D 변환 w로 나누는 마지막 단계에서 완료

'게임 프로그래밍' 카테고리의 다른 글

DX - 투영 행렬  (0) 2025.04.12
몬스터 행동 패턴 구현 정리 (2D)  (0) 2025.04.03