2011-12-08 2 views
1

quaternions를 사용하여 OpenGL에서 객체를 회전하고 있지만 5도에서 -5도 (단위 평면 교차)에서 회전 할 때 내 모델 스핀이 " 먼 길. " 즉 비행기를 가로 질러 10 도가 아닌 5도에서 -5 도로 전체 350도 회전합니다. 이것은 각 축에 대한 회전에 대해 발생합니다. 언제든지 0도를 통해 회전하여 "이동"하고,이를 수정하는 방법을 모르겠습니다.OpenGL에서 0 번 회전

quaternion[0] = cos(pitch/2)*cos(yaw/2)*cos(roll/2) + sin(pitch/2)*sin(yaw/2)*sin(roll/2); 
quaternion[1] = sin(pitch/2)*cos(yaw/2)*cos(roll/2) - cos(pitch/2)*sin(yaw/2)*sin(roll/2); 
quaternion[2] = cos(pitch/2)*sin(yaw/2)*cos(roll/2) + sin(pitch/2)*cos(yaw/2)*sin(roll/2); 
quaternion[3] = cos(pitch/2)*cos(yaw/2)*sin(roll/2) - sin(pitch/2)*sin(yaw/2)*cos(roll/2); 
glLoadIdentity(); 
glPushMatrix(); 
glRotatef((float) (2.0f * acos(quaternion[0]) * 180.0f/PI), quaternion[1], quaternion[2], quaternion[3]); 

어떤 제안 :

내 코드 롤, 피치 및 요는 오일러 내 객체의 회전 각도를 대표하는 곳처럼 보인다?

답변

2

문제는 쿼터니언이나 glRotate()가 아니므로 순환을위한 스텝 거리를 계산하는 곳입니다.

-5과 같은 음수 각도가 0..359 범위의 값으로 "수정 됨"이므로 355가되어 회전이 5에서 355까지 수행되는 정규화를 사용하고있을 가능성이 있습니다. .

관련 문제