728x90



짐벌락이란?

= x축(Pitch) y축(Yaw) z축(Roll) 의 세축이 회전을 하다가

 특정 축이 특정각으로 회전을 했을 때 두 축이 겹쳐서 한축이 소실되는 현상을 말한다.

 


짐벌락 현상이 일어나는 이유!

      1. 오일러 각을 이용하기 때문에

      2. 오일러 각 회전을 순차적으로 하기 때문에

 


짐벌락 현상을 완벽하게 막을 방법?

 - 단정적으로 말하자면 존재하지 않다.

즉, 우리는 짐벌락현상을 최대한 피하는 방법 밖에 없다.

 


짐벌락 현상을 최대한 피하는 방법

     1. 오일러 각 회전의 순서를 바꾼다.

     2. Axis라는 임의의 축회전을 이용한다.

     3. 쿼터니언을 이용한다.

 


오일러 각 회전의 순서 바꾸기

- 잘 생각해보면 xyz 축회전에서 순서를 바꾸어 나타낼 수 있는 가지수는 총 6가지이다.

 

즉, xyz xzy yxz yzx zxy zyx 로 회전의 순서를 바꿀 수 있다.

 


여기서 잠깐! 순서를 정하는 방법을 알아보자.

     1. 가장 자주 회전하게 될 축을 먼저 회전한다.

     2. 가장 회전을 안하게 될 축을 2번째로 회전한다.

     3. 남은 축을 회전한다.

 

이유!? 순서에 의한 짐벌락 현상은 두번쨰 회전하는 축이 90도(-90도)를 회전하게 되면

 1번째 축과 3번째 축이 겹치면서 발생한다.

즉, 순서를 바꿔서 최대한 피하는 방법은 두번째 회전하는 축이 90도가 되지 않으면 된다.

다시 말해 두번째 회전하는 축이 회전을 자주하지 않으면 90도가 될 확률이 낮기에 위와같은 순서로 회전한다.

 

 

Axis라는 임의의 축회전을 이용하는 방법

- 사실 아직 정보가 부족하다. 우선적으로 알고 있는 정보는

'D3DXMatrixRotationAxis' 라는 함수 이다.

이 함수는 인자로 결과행렬을 내 뱉고, 임의의 축이 될 벡터와 회전을 먹일 회전행렬을 인자로 원한다.

 

여기까지가 필자가 알고있는 Axis에 대한 정보이다.

 

하지만 이 임의의 축회전도 문제가 있다.

 

임의의 축을 놓고 회전할 때 보간의 처리( 선형보간, 구면보간 )의 문제로 회전 시에 뚝뚝 끊겨보이게 된다.

 

이 문제를 해결할 쿼터니언이 존재한다.




출처 : http://blog.naver.com/qkfkf123/60170135935

728x90

+ Recent posts