짐벌락과 쿼터니언
- 짐벌락
짐벌락이란?
= 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도가 될 확률이 낮기에 위와같은 순서로 회전한다.
<영상
자료>
http://serviceapi.nmv.naver.com/flash/convertIframeTag.nhn?vid=3BC022F3654BF874381C994D9E29BBA102C3&outKey=V128a5c729f05a8b0b788bb9ead3d6b3a7a4ada8c814771624487bb9ead3d6b3a7a4a&width=720&height=438
Axis라는 임의의 축회전을 이용하는 방법
-
사실 아직 정보가 부족하다. 우선적으로 알고 있는 정보는
'D3DXMatrixRotationAxis'
라는 함수 이다.
이
함수는 인자로 결과행렬을 내 뱉고, 임의의 축이 될 벡터와 회전을 먹일 회전행렬을 인자로 원한다.
여기까지가
필자가 알고있는 Axis에 대한 정보이다.
하지만
이 임의의 축회전도 문제가 있다.
임의의
축을 놓고 회전할 때 보간의 처리( 선형보간, 구면보간 )의 문제로
회전 시에 뚝뚝 끊겨보이게 된다.
이
문제를 해결할 쿼터니언이 존재한다. ( 물론 쿼터니언도 완벽하게 짐벌락을 막을 수는 없다. )
쿼터니언은
비교적 어려운 수학적 학문이므로 다음 포스트로 옮기도록 하겠다.
다음
포스팅은 쿼터니언에 대해 정리하고
지금
이 포스팅에 이미지, 영상 추가 등
최종본으로
정리하도록 하겠습니다. ㅋ
*
수정
완료 ^^