2012-01-04 12 views
2

내 OpenGL 응용 프로그램에서 마우스를 사용하여 객체 회전을 위해 ArcBall 회전을 사용해야합니다. 보간법을 사용하는 OpenGL ArcBall 회전 및 애니메이션?

나는이 글 읽은 후 나는 쿼터니온으로 가야한다는 relized - http://www.gamedev.net/page/resources/_/technical/math-and-physics/quaternion-powers-r1095

를 그리고 여기에서 구현을 사용하기 쉬운 발견 - http://www.codeproject.com/KB/openGL/virtualtrackball.aspx

하지만 내 문제는 내가 아니라 내 오브젝트 애니메이션을 할 필요가있다 저장된 두 상태 사이. 즉 -

상태 (1) = (포지션 X1, 위치 Y1, 위치 Z1, 회전 1);

상태 (2) = (포지션 X2, 위치 Y2, 위치 Z2, 회전 2);

은 *이 '돌리기'는

회전 행렬이다 그리고 애니메이션은 n 개의 단계로 이루어집니다. 동영상에 도시 추천

뭔가 - http://www.youtube.com/watch?v=rrUCBOlJdt4

I 세 axises (롤, 피치, 요우) I 쉽게 강도를 보간 할 수있는 3 개위한 별도의 각도를 사용 되었다면. 그러나 ArcBall은 회전 Matrix를 사용하기 때문에 상태 1과 상태 2 사이의 회전을 어떻게 보간 할 수 있습니까?

제안 사항?

답변

2

내부적으로 회전 표현에 Matrix 또는 Quaternion을 사용하십시오. 롤/피치/요우를 사용하면 이론적으로 각도를 삽입 할 수 있지만 매번 작동하지 않습니다. Gimbal lock을 읽으십시오.

쿼터니언을 사용하면 회전 보간법이 간단합니다. (r/p/y 각도와 마찬가지로) 개별 좌표를 보간하고 필요한 경우 정규화합니다. 쿼터니언으로 작업하려면 렌더링 함수를 조정해야합니다 (하지만 쿼터니언을 언급 한 이후로 이미 그렇게했다고 가정합니다).

Matrixes를 사용하면 보간법이 너무 좋지 않습니다. 몇 년 전에 고생했는데, 기억하기 만하면 쿼터니언을 사용하기로 결정했습니다. 그래서 저는 이것에 대해 조언 할 수 없습니다, 죄송합니다.

+0

이유를 참조하십시오. 이것을 좌표계로 옮겨야합니다. 실린더 좌표와 마찬가지로, 실린더 축은 회전축입니다 (구 좌표계에서도 동일하지만 실린더는 계산 비용이 적습니다). – datenwolf