동차 좌표
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 |