기본 패턴
text
local -> world -> view -> clip -> screen설명
- 게임 개발에서 좌표계는 "값이 맞냐"보다 "어느 공간에서 맞냐"가 더 중요합니다. 같은
(0, 1, 0)도 local up인지, world up인지, camera 기준 위쪽인지에 따라 의미가 달라집니다. - local space는 오브젝트 자신의 기준이고, world space는 씬 전체의 공통 기준입니다. view space는 카메라 기준, clip/screen space는 최종 렌더링에 가까운 공간입니다.
- transform 문제의 대부분은 계산식이 틀려서가 아니라, 서로 다른 공간의 값을 섞어서 생깁니다. 예를 들어 local offset을 world 좌표처럼 더하거나, camera 기준 벡터를 object 기준으로 해석하면 결과가 어긋납니다.
- 2D와 3D 모두 이 사고가 중요합니다. UI 앵커, minimap 좌표, aiming ray, projectile spawn, billboard 계산도 결국 "어느 공간에서 계산하고 어느 공간으로 넘기느냐"의 문제입니다.
- 좌표계를 이해한다는 것은 행렬 공식을 암기하는 것보다, "지금 이 값은 누구 기준으로 정의된 값인가"를 습관처럼 묻는 것입니다. 그 질문만 잘해도 절반 이상의 transform 버그가 줄어듭니다.
짧은 예제
text
무기 muzzle 위치는 캐릭터 local offset으로 잡는다
발사 방향은 캐릭터 world forward로 변환한다
카메라 조준점은 screen -> world 변환이 필요하다빠른 정리
| 공간 | 의미 |
|---|---|
| local | 오브젝트 자신의 기준 좌표 |
| world | 씬 전체의 공통 기준 좌표 |
| view | 카메라가 원점인 좌표 |
| clip | 투영 이후 clipping 직전 좌표 |
| screen | 최종 픽셀 또는 화면 기준 좌표 |
주의할 점
좌표계 버그는 숫자가 조금 틀린 정도로 보이지만, 실제 원인은 공간을 섞어 쓴 경우가 많습니다. 디버깅할 때는 식을 줄이기보다 먼저 각 값에 "local/world/view 중 무엇인가" 라벨을 붙여 보는 편이 더 빠릅니다.
참고 링크
2 sources