Quaternion

대인공·2022년 10월 18일
0

Unity

목록 보기
8/14
post-thumbnail

Euler Angle

3차원 벡터를 이용하여 회전각을 표현하는 방법.

물체의 회전량 = (회전 후 물체의 좌표계) - (회전하기전 물체의 좌표계)

회전량에 대한 연산을 x,y,z 순서대로 하다보면 'Gimbal Lock'이라는 문제가 발생한다.


Gimbal Lock

짐벌락은 같은방향으로 오브젝트의 두 회전 축이 겹치는 현상

회전에 대한 연산을 순차적으로 하다보니 다른 연산인데 결과가 같아지는 문제를 말한다.
예를 들면, 어떠한 한 물체에 대한 회전연산을 아래와 같이 하면

  1. x축을 90도, y축으로 90도 회전
  2. y축을 90도, z축으로 90도 회전

연산과정은 다르지만, 결과는 같아보인다.

이러한 문제점을 해결하기 위해서 Quaternion을 사용한다.



Quaternion

Euler Angle과 다르게 x,y,z,w 4가지의 원소를 사용하여 회전을 표현한다.
또한, 순차적으로 연산하는 것이 아닌 한번에 연산을 하기 때문에 Gimbal Lock현상도 해결 가능하다.

연산과정은 복잡하기 때문에 Unity에서는 클라이언트에게 제어를 허용하지 않는다.
편의를 위해 다양한 Euler Angle <-> Quaternion 변환 메소드와, Quaternion 제어 메소드를 제공한다.


회전에 회전을 더하기

일반적인 오브젝트의 위치를 변화시킬 때 벡터를 더해줌으로써 이동을 시킨다.
하지만 회전은 위치와 다르게 곱셈연산자를 사용해야한다.

변환 연산은 일반 정수 연산이 아니라 행렬연산을 하기 때문에 곱셈연산자를 사용하여 연산한다.


profile
이제 막 시작하는 유니티 클라이언트

0개의 댓글