Game Dev게임 수학

행렬 변환과 순서

이동, 회전, 크기 변형을 행렬 곱으로 다룰 때 순서가 왜 중요한지와 local-to-world 변환을 어떻게 읽어야 하는지 정리합니다.

마지막 수정 2026년 3월 22일

기본 패턴

text
modelMatrix = translation * rotation * scale
worldPosition = modelMatrix * localPosition

설명

  • 행렬은 여러 변환을 하나의 계산 흐름으로 묶어 주는 도구입니다. 이동, 회전, 크기 변형을 각각 따로 생각하던 것을 한 번의 곱셈 체계로 정리할 수 있기 때문에 3D 그래픽스와 transform 시스템의 중심에 놓입니다.
  • 중요한 것은 행렬 자체보다 곱하는 순서입니다. scale 후 rotation 후 translation을 할지, translation 뒤에 rotation을 할지에 따라 결과는 달라집니다. 그래서 행렬 문제는 값이 아니라 순서 문제로 읽는 습관이 중요합니다.
  • local-to-world 변환을 이해하면, 모델 내부 좌표로 정의된 점이 월드에서 어디에 놓이는지 설명할 수 있습니다. 이 사고가 있어야 본격적인 camera/view/projection 변환도 자연스럽게 연결됩니다.
  • 초보자가 흔히 하는 실수는 "이동, 회전, 크기 변형은 서로 독립적이니 순서는 중요하지 않다"고 보는 것입니다. 실제로는 회전 기준점, 크기 변형 중심, 부모-자식 계층이 모두 순서의 영향을 받습니다.
  • 행렬 카드는 공식을 많이 적는 카드보다, "지금 내가 적용하는 변환은 누구 기준인가"와 "왜 이 순서여야 하는가"를 설명하는 카드가 더 오래 갑니다. 게임 엔진 transform hierarchy도 결국 이 문제를 감춰서 도와주는 인터페이스입니다.

짧은 예제

text
칼 모델의 local 좌표에 손잡이 기준이 있다
캐릭터 손 본에 붙을 때는
  local sword transform
  -> hand bone transform
  -> character world transform
순서로 누적된다

빠른 정리

항목핵심 포인트
translation위치를 옮긴다
rotation방향과 기준축을 바꾼다
scale크기를 바꾼다
곱셈 순서결과 위치와 기준점이 달라진다
local-to-world로컬에서 정의한 점을 월드에 배치한다

주의할 점

행렬 문제를 숫자 계산 실수로만 보면 디버깅이 잘 안 됩니다. 결과가 이상하면 먼저 "순서가 맞는가", "부모 기준인가", "로컬 값을 월드 값처럼 읽고 있지 않은가"를 점검하세요.

참고 링크

2 sources