[게임수학] 짐벌락과 쿼터니언 - 1 게임수학 / 개인

2012/08/30 13:15

복사http://blog.naver.com/qkfkf123/60170135935

짐벌락과 쿼터니언

- 짐벌락

짐벌락이란?

= 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에 대한 정보이다.

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

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

이 문제를 해결할 쿼터니언이 존재한다. ( 물론 쿼터니언도 완벽하게 짐벌락을 막을 수는 없다. )

쿼터니언은 비교적 어려운 수학적 학문이므로 다음 포스트로 옮기도록 하겠다.

다음 포스팅은 쿼터니언에 대해 정리하고

지금 이 포스팅에 이미지, 영상 추가 등

최종본으로 정리하도록 하겠습니다. ㅋ

*

수정 완료 ^^


아래 내용은 위 내용에 조금 추가하면

위의 이미지는 x 축을 회전 시키는 과정이고 아래 그림은 x 축을 90 또는 -90 도로 회전시켰을때 이고

이때 y축과 z 축이 같은 회전 선상에 있다는 것을 알 수 있다

이때 짐벌락이 발생한다

반응형

+ Recent posts