$\vec{X} = (1,0,0)$ 기저에 대해 시계방향으로 $x^\circ$ 도 회전, $\vec{Y} = (0,1,0)$ 기저에 대해 시계방향으로 $y^\circ$ 도 회전, $\vec{-Z} = (0,0,-1)$ 기저에 대해 시계방향으로 $z^\circ$ 도 회전하는 회전을 나타내는 Quaternoinout 에 담아 돌려줍니다.

회전 순서는 RotationOrder 열거형을 참고하시길 바랍니다. 기본 순서는 $yaw ⇒ pitch ⇒ roll$ 을 나타내는 RotationOrder.EulerYXZ 입니다. Quaternion.euler() 로 생성한 회전은 오일러각(euler angles)을 사용했기 때문에 여전히 짐벌락(gimbal-lock) 현상이 존재함에 유의하시길 바랍니다.

Syntax

Quaternion.euler(x,y,z);
Quaternion.euler(x,y,z,order);
Quaternion.euler(x,y,z,order,out);

Parameters

x

$pitch$ 회전에서 사용할 각도(degree)를 나타내는 number . 회전축은 $\vec{X} = (1,0,0)$ 입니다.

y

$yaw$ 회전에서 사용할 각도(degree)를 나타내는 number . 회전축은 $\vec{Y} = (0,1,0)$ 입니다.

z

$roll$ 회전에서 사용할 각도(degree)를 나타내는 number . 회전축은 $\vec{-Z} = (0,0,-1)$ 입니다.

order

$q_{yaw}, q_{pitch}, q_{roll}$ 들의 결합 순서를 나타내는 RotationOrder 열거형.

out

결과를 담을 Quaternion . 인자를 주지 않으면 임시 변수를 생성합니다.

Return value

오일러각(Euler angles)을 사용한 회전을 나타내는 Quaternion . out 인자를 주었다면 결과를 out 에 저장하고 out 을 그대로 돌려줍니다.

Description

RendererJS 는 왼손좌표계(left-hand coordinate system)를 사용하며, 모든 회전은 회전각 $\theta^\circ$에 대해서 시계방향(clockwise)으로 회전합니다. 이는 Quaternion.mulVector() 에서 회전공식을 설계할때 그렇게 설계했기 때문입니다. $roll$ 회전이 $\vec{-Z}=(0,0,-1)$ 를 회전축으로 사용하는 이유 또한 $(\vec{Y}\times\vec{X})=\vec{-Z}$ 이기 때문입니다. 즉 Quaternion.euler() 의 회전을 그림으로 확인하면 다음과 같습니다:

RendererJS 가 사용하는 좌표계(coordinate system). 왼손좌표계일때 오일러각(Euler angles) 회전을 보여줍니다.

RendererJS 가 사용하는 좌표계(coordinate system). 왼손좌표계일때 오일러각(Euler angles) 회전을 보여줍니다.