• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    해결됨

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

24.04.29 22:33 작성 조회수 61

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
책은 언리얼을 기준으로 만들었습니다.

상병님의 프로필

상병

질문자

2024.04.30

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