인프런 커뮤니티 질문&답변

상병님의 프로필 이미지
상병

작성한 질문수

게임 엔진을 지탱하는 게임 수학

로컬 <-> 월드 트랜스폼 변환 시 모델링 행렬을 바로 곱하지 않는 이유

해결된 질문

작성

·

172

0

안녕하세요, 해당 강의를 듣고 난 후 조금 더 수학 지식을 쌓기 위해 '이득우의 게임수학' 책으로 공부하고 있는 취준생입니다.

제가 수학 지식이 얇아서 이해에 어려운 부분이 있어 질문 드립니다.

619p. ~ 624p. 에 걸쳐서

  1. 부모 월드 + 내 로컬을 이용한 내 월드 트랜스폼 구하기

  2. 부모 월드 + 내 월드를 이용한 내 로컬 트랜스폼 구하기 내용이 있는데,

여기서 왜 Scale, Rotation, Translation을 따로 구하는지 궁금합니다.

 

제가 생각을 해보았는데,

모델링 행렬끼리 곱해서 구해버리면 T * R * S * T * R * S 순서로 곱해져서,

Rotation과 Scale의 경우가 제대로 계산되지 않기 때문인 것인가요?

ex) 1의 경우 내 로컬 Transform의 Scale은 부모 Scale 내 로컬 Scale, Rotation은 부모 Quat * 내 로컬 Quat 이어야 하는데,

내 월드 트랜스폼을 구하기 위해 각 트랜스폼에서 구한 모델링 행렬끼리 곱해서 구해버리면 중간에 다른 연산이 들어간 상태에서 Scale, Rotation이 구해진다?

 

 

답변 1

1

이득우님의 프로필 이미지
이득우
지식공유자

안녕하세요 거의 막바지까지 다 읽으셨네요. 축하드립니다.
질문 내용의 수준을 보면 꽤나 책을 자세히 읽으신 것 같습니다. 저자로써 기쁘네요.
하나의 트랜스폼에 대해 대응하는 행렬 데이터를 별도로 보관하는 것은 추가 메모리 공간 혹은 계산이 요구됩니다.
( 계산된 행렬을 캐싱하는 방법도 있습니다. )

책에서는 행렬없이 트랜스폼 속성만 가지고 간편하게 계산 가능한 식을 만들어 사용하고 있습니다.
하지만 책과 다르게 트랜스폼마다 대응하는 행렬을 사용해 행렬연산을 하는 방법도 있습니다.
이게 참 재미있는데요, 언리얼과 유니티는 이 부분에서 구현의 차이가 있습니다.
아래 그림을 보면 같은 값을 입력했는데, 결과가 다른 것을 볼 수 있습니다.
즉 사용자 인터페이스적인 측면에서 회전과 스케일을 함께 반영할 것인가, 독립적으로 반영할 것인가의 차이로 생각하면 됩니다.

imageimage
책은 언리얼을 기준으로 만들었습니다.

상병님의 프로필 이미지
상병
질문자

원하는 방식으로 구현이 가능하군요! 답변 감사드립니다.

상병님의 프로필 이미지
상병

작성한 질문수

질문하기