QuaternionMatrix4x4 로 변환한 결과를 out 에 담아 돌려줍니다. 표준 기저 벡터 $\vec{X} = (1,0,0), \vec{Y} = (0,1,0), \vec{Z} = (0,0,1)$ 에 q 를 곱한 결과를 Matrix4x4 의 기저벡터 basisX, basisY, basisZ 로 사용합니다. basisW 는 $\vec{(0,0,0,1)}$ 로 초기화됩니다.

Syntax

q.toMatrix4x4();
q.toMatrix4x4(out);

parameter

out

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

Return value

회전된 기저 벡터 $(q\cdot\vec{X}), (q\cdot\vec{Y}), (q\cdot\vec{Z})$ 들로 초기화된 Matrix4x4 . out 을 인자로 주었다면 out 에 결과를 저장하고 돌려줍니다.

Description

행렬은 표준 기저 벡터 $\vec{X} = (1,0,0), \vec{Y} = (0,1,0), \vec{Z} = (0,0,1)$ 를 변형시킨 후, 벡터 $\vec{(x, y, z)}$ 의 스칼라값을 사용하여 선형결합(linear combination)하는 것이 원리입니다. 회전 행렬(Rotation matrix) 또한 원리는 같습니다.

즉 사원수를 회전행렬로 변환한다는 것은, 표준기저벡터 $\vec{X}=(1,0,0), \vec{Y}=(0,1,0), \vec{Z}=(0,0,1)$ 를 사원수 $q$ 와 곱해서 회전시키라는 의미입니다:

$$ R(\vec{X}) = q\cdot\vec{X}\cdot q^* = (a,b,c) \\

R(\vec{Y}) = q\cdot\vec{Y}\cdot q^* = (d,e,f) \\

R(\vec{Z}) = q\cdot\vec{Z}\cdot q^* = (g,h,i) $$

이렇게 회전시킨 표준기저벡터를 행렬에 넣어주면 끝입니다:

$$ \begin{bmatrix} a & d & g & 0 \\ b & e & h & 0 \\ c & f & i & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix} $$

Scaling, Translation, Perspective 같은 변환들과 합치기 위해서는 반드시 Quaternion.toMatrix4x4() 를 사용해야 합니다.