본문 바로가기

웹개발/Flex

Gimbal lock 문제


짐벌락이란 무엇인가?

   짐벌락은 같은방향으로 오브젝트의 두 회전 축이 겹치는 현상을 말한다. 간단히 설명하면 오브젝트가 자신이 회전하려고 하는 방향으로 오브젝트가 회전하지 않는 것이다.

 

이러한 현상이 일어나는가?
  짐벌락은 오일러 앵글이라고 알려진 회전 행렬로 오브젝트를 애니메이트 하려고 할 때 발생한다.

오일러 앵글이 설정한 순서에 각 축을 독립적으로 평가하기 때문이다.
3DS Max는 회전순서가 X,Y,Z로 되어있다.(이 순서는 변경이 가능)

X,Y,Z로 회전순서가 돼어있다는 것은 먼저 X축으로 오브젝트를 회전시키고 그 다음 Y축으로 회전하고 마지막으로 Z축으로 회전한다는 의미이다. 이때 Y축을 90도로 회전할 때 짐벌락이 발생한다.
왜냐하면 X 성분이 이미 평가가 됐기 때문에, 다른 두축으로 이동되지 않는다.
이렇게 되면 X와 Z축이 서로 같은 축을 향해 가리키게 된다.


 

예제 프로그램은 오일러 각으로 회전을 표현했을 경우이다.

yaw(y축 회전각)을 90로 고정시키고 pitch(x축), roll(z축) 회전을 실시했을 경우 pitch 와 roll 회전이 같은 방향으로 회전하게 된다.

(이것이 gimbal lock)

오일러 각으로 회전을 표현할경우 전체 회전행렬 = z축 회전행렬 * y축 회전행렬 * x축 회전행렬 과 비슷한 순서의 회전행렬(회전행렬의 순서는 사용자 임의로 바꿀수 있으며 이때 gimbal lock 되는 축도 그에 따라 바뀜)을 사용하게 되는데 이때 yaw각을 90도로 회전시켰을 경우(회전행렬의 순서상) x축이 -z축이 되어 x축회전을 하나마 나한상태가 된다.