MoGL 0.4

4원수(Quaternion) 회전

4원수 회전이란

  • x, y, z 축별 회전 행렬을 사용하는 대신
  • 특수한 복소수인 4원수를 이용해서
  • 정점을 회전

걍 축별 회전 행렬 쓰지 왜??

  • Gimbal lock(짐벌락 or 김벌락)
  • 3차원 공간상에서의 보간이 더 정확
  • 한 번만 곱하면 된다

어떻게?

1) x, y, z 축별 회전각을 모두 적용하는 회전을 R이라 하자.

2) 공간상의 모든 회전은 회전축 a와 회전축에 수직인 평면상의 회전각 b로 구성된다.

3) 2)는 하나의 4원수 q로 표현할 수 있다.

4) 어떤 정점 p에 회전 R을 적용한 결과는 qpq*를 계산하면 나온다.

5) qpq* = Mp 인 행렬 M을 구할 수 있다.

따라서 x, y, z 축별 회전각을 입력값으로 받아

회전 R의 효과를 내는 하나의 행렬 M을 구할 수 있다.

MoGL에는 어떻게 적용?

1) MoGL에서 정점의 변환에 대한 내용은 VertexShaderFunctions.js와 Shader.js 에서 다루고 있음

2) 축 별 회전각 Rx, Ry, Rz가 주어지면, 4원수를 이용한 회전행렬 Q를 반환하는 함수 A구현 

3) VertexShaderFunctions.js와 Shader.js에 함수 A 추가

4) 테스트 등등..

 

MoGL-0.4-Quaternion

By Myung Woon, Oh

MoGL-0.4-Quaternion

MoGL 0.4 사원수 회전 반영

  • 869