У меня есть небольшая функция для создания нового экземпляра WorldObject
.
Я хочу использовать osg::ref_ptr<osg::PositionAttitudeTransform>
для перемещения и поворота, но есть проблема, которую я не могу понять.
Я использую setTranslation()
с Vec3
, который работает очень хорошо. Но Quat
с makeRotation()
просто ничего не делает.
Вот код:
osg::ref_ptr <osg::PositionAttitudeTransform> getWorldObjectClone(const char* name, osg::Vec3 position = osg::Vec3(0, 0, 0), osg::Vec3 rotation = osg::Vec3(0, 0, 0))
{
osg::ref_ptr <osg::PositionAttitudeTransform> tmp = new osg::PositionAttitudeTransform;
osg::Quat q(0, osg::Vec3(0, 0, 0));
tmp = dynamic_cast<osg::PositionAttitudeTransform*>(WorldObjects[name]->clone(osg::CopyOp::DEEP_COPY_ALL));
tmp->setPosition(position);
q.makeRotate(rotation.x(), 1, 0, 0);
q.makeRotate(rotation.y(), 0, 1, 0);
q.makeRotate(rotation.z(), 0, 0, 1);
tmp->setAttitude(q);
return tmp;
}
Я пробовал вращение = {90,0,0} (градусы) и вращение = {1,0,0} (радианы), но оба не имеют никакого эффекта. Есть ли ошибка в том, как код использует Quat
?