Local Transform 과 World Transform 구하기


Transform의 구성

XAxis = [Xx, Xy, Xz]
YAxis = [Yx, Yy, Yz]
ZAxis = [Zx, Zy, Zz]
WorldPos = [World_Xpos, World_Ypos, World_Zpos]
Transform : matrix3 XAxis YAxis ZAxis WorldPos

World Transform : World 기준으로 봤을 때의 Transform 값
Local Transform : 부모의 축을 기준으로 봤을 때의 Transform 값


역행렬 만들기

worldTM : World Transform
inverse worldTM (역행렬) : World Transform은 World 축을 기준으로 봤을 때, 얼마만큼 변화되었는가를 알려주는 방법이고, 역행렬은 그 반대인 자신의 축을 기준으로 월드로 이동하는 방법이다.


단위 행렬 만들기

-- 'worldTM'을 'inverse worldTM'를 이용해 기준 축으로 돌려라.
단위행열 = worldTM*(inverse worldTM)
(MAX는 orgTM(대상 Transform)에서 TempTM(임의의 Transform) 만큼 변경되는걸 orgTM*TempTM이라 한다.)
worldTM은 World 기준에서 봤을때 얼마큼 변화되었는가를 알려준다. 다시 기준축으로 보내려면, 역행열을 곱하면 된다.

여기에서 보면 Children Object의 Transform이 같이 변경되었다.
(Teapot의 자식이니 같이 돌아감)
그럼 이제 Children의 Transform 값을 구하면!! Cylinder의 Local Transform을 구할 수 있게 된다.
이제 공식으로 Local Transform을 구해보자~!


Local Transform 구하기

World 상에 두 Transform이 있다.
parentWorldTM, childWorldTM : World Transform
기준 축(Basis)를 wT1으로 잡을 때, wT2의 Local Transform을 구해보자.
inverse parentWorldTM : parentWorldTM를 기준 축으로 돌리는 방법을 구한다.
(단위행열을 만드는건 돌린 것이고, 지금 이건 돌리는 방법만 구하는 것임)
childWorldTM * (inverse parentWorldTM) : childWorldTM에 돌리는 방법을 곱해주면, Local  Transform을 알 수 있다.


World Transform 구하기

parentWorldTM(World Transform)과 자식인 childrenLocalTM(Local Transform)을 가지고, childrenLocalTM의 World Transform을 알아보자.

childLocalTM은 parentWorldTM을 기준 축으로 했을 때의 Transform이기에 왼쪽 그림과 같이 볼 수 있다.
childLocalTM를 다시 parentWorldTM 만큼 변경해주면 World Transform을 구할 수 있다.

Cylinder의 World Transform = childLocalTM * parentWorldTM



Posted by Hwanggoon
,