2014-12-02 2 views
0

행렬로 표시된 회전을 가져온 다음 그 중 하나의 구성 요소를 재설정하는 해결책을 찾고 싶습니다. 기본적으로이 행렬에 의해 벡터를 곱하고 x 축과 z 축을 중심으로 회전하고 y 축 (상향)을 따라 일정한 방향을 얻길 원합니다. 나는 물체 회전을 가져 와서 중력을 나타내는 벡터를 얻고 싶지만 물체의 지역 공간과 요를 무시하고 싶습니다. 그래서 나는 요를 재설정하고 싶습니다.회전 축 하나만 재설정하기

나는 이것을 오일러 각으로 변환하고 싶지 않습니다. 특정 각도에서 발생할 수있는 버그를 피하기 위해 쿼터니언을 사용하거나 회전 행렬에 대한 일련의 연산을 직접 수행하는 것이 좋습니다.

좋아, 그래서 때라도 있습니다

btTransform t; 
mBody->getMotionState()->getWorldTransform(t); 
btMatrix3x3 trans = t.getBasis().inverse(); 
btVector3 up = (trans * btVector3(0, 1, 0)); 

내가 그때 사원 수를 사용한 경우 내가 완전히 잘못 결과를 얻었다 것을 깨달았다 (왜?). 이제 저는 세계 공간에서 벡터를 표현하는 객체 공간에서 벡터를 얻고 있습니다. 그러나이 벡터를 회전하여 모델 공간이 Y 축을 중심으로 회전 할 때 전역 공간 벡터를 나타냅니다. 그래서 어떻게 든이 벡터를 다시 회전시켜야합니다. 방법?

답변

1

통과 된 "Y"축과 함께 쿼터니온 스윙 트위스트 분해를 사용할 수 있습니다. 쿼터니온은 Y 축을 중심으로 회전하고 Y 축에 수직 인 축을 중심으로 회전합니다.

설명은 여기에서 제 대답입니다. Component of a quaternion rotation around an axis