짐벌락이란?
= 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에 대한 정보이다.
하지만 이 임의의 축회전도 문제가 있다.
임의의 축을 놓고 회전할 때 보간의 처리( 선형보간, 구면보간 )의 문제로 회전 시에 뚝뚝 끊겨보이게 된다.
이 문제를 해결할 쿼터니언이 존재한다.
'Visualization Programming > Basic Knowledge' 카테고리의 다른 글
Basic Know - Pixel Bleeding (0) | 2018.03.12 |
---|---|
Basic Knowledge - Bloom Effect (0) | 2017.04.19 |
Basic Knowledge - Z-Fighting (0) | 2017.04.19 |
Basic Knowledge - Pitch , Yaw , and Roll Systems (0) | 2017.04.19 |
Basic Knowledge - FOV (Field of View) (0) | 2017.04.19 |