본문 바로가기

프로그램 공부/Unity 함수

Quaternion

: 하나의 벡터와(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