카테고리 없음

5-10 TIL (Quaternion)

bugmin 2024. 5. 10. 23:42

인스팩터 창에선 회전 정보가 x, y, z의 값으로 나와있던데 왜 사원수(Quaternion)을 알아야할까?

 

왜냐면 x, y, z로만 이루어진 Vector3를 쓰면 짐벌락이라는 문제가 있기 때문이다.

 

자세히 알아보기엔 어려우니 간단하게 극단적인 각도로 회전할때 하나의 축이 사라져서 회전이 고장나게 되는 문제이다.

 

그렇기 때문에 Quaternion이라는 사원수의 개념을 사용한다는 것이다.

 

이는 빠르고 짐벌락 문제도 존재하지 않는다.

 

(x, y, z, w) 의 값으로 표현한다.

 

다만 직접 x, y, z, w 의 값을 설정해서 사용하는 것이 아니라 내장 함수를 이용하는 것이다 좋다.

 

다만 직접적으로 값을 넣어주진 않지만 회전값이 없다는 의미의 Quaternion.Identity는 사용한다.

 

그러면 내장함수에 뭐가 있느냐...?

 

Euler 함수

 

오일러 함수는 오일러 각도를 활용한다는 것이다. 말로만 들으면 생소하지만 그냥 기존에 우리가 쓰던 x, y, z 값을 이용하는 것이 오일러 회전이다. 이걸 직접 degree 값을 넣어주면 된다.

 

Quaternion.Euler(x, y, z) 형식으로 쓰면된다. 굳이 라디안 값을 안써도 된다.

 

더보기

라디안이란?

180도를 파이로 나타내는 표현법임 

Mathf.Rad2Deg 함수를 쓰면 파이(3.14...)를 180도로 만들어주기 위해 180 / 3.14... 의 값을 곱해주는 함수이다.

즉 라디안으로 나타낸 것을 degree 표현법으로 바꿔주는 것이다.

LookRotation

 

앞이랑 위의 값을 알려주었을 때 어떤 회전을 걸어야 하는 지를 알려주는 함수로 즉 3D에서 적용되는 내용이다.

 

Slerp

 

회전의 중간값을 알고 싶을 때 사용한다. 팔을 ㄴ 자로 접고 일자로 피는 상상을 해보자 

 

일자로 필때 그 사이 중간의 값들이 존재하게 된다. 그 값들을 알면 팔을 더 부드럽게 필 수가 있을것이다.

 

사원수와 다른 사원수 사이의 내부점을 알게해주는 함수이다.