마우스를 좌우로만 혹은 상하로만 움직이는 경우는 문제가 없음. 상하좌우 같이 움직일때 문제가 생김.
내 논리상 right 벡터의 y값은 무조건 0이어야 함. 오른팔을 옆으로 뻗고 제자리에서 자신을 축으로 돌아도 내 오른팔이 위나 아래로 가있진 않을거임. 그리고 자신의 오른팔을 축으로 돈다면 오른팔은 축과 같으니까 영향을 받지 않음. 따라서 오른팔의 y값은 0임.

그런데 문제가 뭐냐면, 좌우로 움직인 상태에서 상하로 움직이면 발생함. 역도 성립.
좌우로만 움직였다가 상하로 움직이는 순간, 기존의 rotation(쿼터니언)에 회전량을 곱해줄 때, 로테이션의 x, z값이 0이 아니게 됨.

식이 잘 기억은 안나는데 쿼터니언의 xw - yz인가? 이런 느낌이었음. 아무튼 right 벡터의 y에 대응되는 회전행렬의 원소 값이 두 항의 차인데, 각 항에 쿼터니언의 x와 z가 곱해짐. 그래서 이 두 값이 0일때는 항상 0이 나왔는데 이젠 0이 아님. 매우 작은 수치로 나옴. 왜냐면 x와 z의 값이 근사하고 y와 w의 값이 근사함. 하지만 동일하진 않아서 0이 아닌 매우 작은 수치로 나타남. 그리고 이 값이 누적되니까 right 벡터의 y 값이 커지면서 이상한 결과를 낳음.

Rotation before multiplication
w -0.700909436 float
x 0.00000000 float
y -0.713250279 float
z 0.00000000 float

Quaternion
w 0.999961913 float
x 0.00872653536 float
y -0.00000000 float
z -0.00000000 float

Rotation after multiplication (Quaternion * Rotation)
w -0.700882733 float
x -0.00611651083 float
y -0.713223100 float
z -0.00622420385 float

Right Vector
x -0.0174518228 float
y -9.31322575e-10 float
z 0.999847770 float

이유는 찾았는데 해결은 못하겠다 이거.