#c #openscenegraph
#c #openscenegraph
Вопрос:
Я работаю над моделью OSG, которая содержит несколько узлов DOFTransform. Для выполнения геометрических вычислений на 3D-модели мне нужно знать, какая ось вращения и точка, в которой расположена эта ось, возможно ли это?
Ответ №1:
osgSim ::DOFTransform http://trac.openscenegraph.org/documentation/OpenSceneGraphReferenceDocs/a00215.html
имеет
const osg::Vec3amp; osgSim::DOFTransform::getCurrentHPR() const;
чтобы получить углы Эйлера для ** H ** eading, ** P ** itch и ** R ** oll, и
MultOrder osgSim::DOFTransform::getHPRMultOrder() const;
чтобы получить соглашение, предназначенное для использования для последовательности поворотов.
Опорная точка может быть определена с помощью
const osg::Vec3amp; osgSim::DOFTransform::getCurrentTranslate () const;
Учитывая вектор v, выраженный в координатах кадра, на который ссылается перевод t, это
v’ = v — t
к которому должны быть применены вращения.
Для преобразования угла Эйлера в представление оси / угла, пожалуйста. принять участие:
Кроме того:
Пусть M — объединенная матрица вращения, например
M = H * P * R
(H, P, R здесь обозначают соответствующие матрицы для заданных углов) и векторы v ‘, v» с
v» = M * v’
которые не являются коллинеарными, искомая ось является просто их нормализованным перекрестным произведением, а угол можно найти, применив базовую тригонометрию.