: 하나의 벡터와(x, y, z)와 하나의 스칼라(w, roll을 표현)를 의미한다. → (x, y, z, w)
벡터가 위치(Position)임과 동시에 방향(Directionˇ)이면, 쿼터니안은 방향(Orientationˇ)임과 동시에 회전(Rotation)이다.
Directoin : 두 점을 이용해 나타낼 수 있는 방향. ~로 향하는 움직임
Orientation : 세가지 오일러 각 또는 쿼터니안을 이용해 나타낼 수 있는 방향. ~를 향하고 있는 상태
유니티는 오일러 각을 이용해 회전을 직관적으로 조작할 수 있도록 인스펙터 뷰에 표시하고있다.
하지만 내부적으로는 쿼터니안 방식으로 변환하여 회전을 계산한다.
따라서 사용자가 예외적으로 오일러 각을 계산해서 이용하도록 설정하지 않는 이상 유니티에서 짐벌락(Gimbal Lock)ˇ 현상은 일어나지 않는다.
짐벌락(Gimbal Lock) 현상 : 3개의 축을 이용해 회전하는 3차원에서 두개의 축이 겹쳐질 경우 회전축 하나가 사라지는 현상. 겹쳐진 두개의 축이 하나의 축으로 합쳐져 각각 회전시켜도 같은 축을 기준으로 회전하게 되는 것
- 오일러 각 vs 쿼터니안
오일러 각 (Euler Angles) | 쿼터니안 (Quaternion) | |
3차원 공간의 절대좌표를 기준으로 물체의 회전을 측정하는 방식 | 위의 내용 | |
장점 |
- 세 개의 축을 기준으로 회전하기에 직관적이며 조작하기 쉽다. - 180도가 넘는 회전도 표현할 수 있다. |
- 짐벌락 문제가 없다. - 계산하는데 드는 비용이 적다. |
단점 |
- 오일러 각을 계산하는데 드는 비용이 크다. - 짐벌락 현상이 발생할 수 있다. |
- 쿼터니안을 이용한 회전은 하나의 방향에서 다른 방향으로 측정되기에 180보다 큰 회전을 표현할 수 없다.
- 직관적으로 이해하기 힘들다. |
- 쿼터니안 관련 함수
Quaternion Quaternion.LookRotation(Vector3 방향);
: 해당 방향으로의 쿼터니안 생성
float Quaternion.Angle(Quaternion rotation, Quaternion rotation)
: 두 쿼터니안의 각도
Quaternion Quaternion.Euler(Vector3 오일러각)
: 오일러각에 해당하는 쿼터니안 생성
Quaternion Quaternion.Slerp(Quaternion, Quaternion, float time)
: 시간에 따른 변화값
Quaternion Quaternion.FromToRotation(Vector3 from, Vector3 to);
: 특정 방향에서 다른 방향으로의 쿼터니안
Quaternion.Identity();
: 로테이션 없음
'프로그램 공부 > Unity 함수' 카테고리의 다른 글
화살표 함수 => (0) | 2019.06.28 |
---|---|
클래스) UnityEditor.EditorApplication (0) | 2019.06.28 |
유니티 마우스, 터치 관련 함수 (0) | 2019.05.23 |
유니티 게임오브젝트 이동 (0) | 2019.05.21 |
유니티 캐릭터 이동 (0) | 2019.05.21 |