вращать объект Ogre Manual между двумя векторами Ogre - PullRequest
0 голосов
/ 24 марта 2020

Изображение Я работаю над проектом плагина rviz, в котором мне нужно переместить структуру ogre cube me sh между двумя координатами.

Вот код, который я сделал для этого

Ogre::Vector3 src (1,2,3);
Ogre::Vector3 destination(4,5,6);
//manual object
static int count=0;
const std::string& filename="cube.mesh";
Ogre::MeshPtr cube= rviz::loadMeshFromResource(filename);    
std::stringstream str;
str << "cube" << count++;
Ogre::Entity *entity = scene_manager_->createEntity(str.str(),cube);
Ogre::SceneNode* parent_node = scene_manager_->getRootSceneNode();
parent_node ->attachObject(entity);
parent_node ->setPosition((src+destination)/2);   //by doing this the cube passes through mid point
Ogre::Radian angle = src.angleBetween(destination);

//here is some error, 
Ogre::Quaternion angle_x((angle), Ogre::Vector3::UNIT_X);
Ogre::Quaternion angle_y((angle), Ogre::Vector3::UNIT_Y);
Ogre::Quaternion angle_z((angle), Ogre::Vector3::UNIT_Z);
parent_node ->rotate(angle_x*angle_y*angle_z);

Однако он не выравнивается между двумя векторами. Пожалуйста, помогите.

1 Ответ

0 голосов
/ 25 марта 2020

Чтобы получить направление от пункта sr c до пункта назначения, вы должны вычесть эти позиции, получив вектор.

Насколько я понимаю (ничего не знаю об Огре), src.angleBetween(destination); дает angular разница между направлением от пункта отправления до пункта назначения и направлением от пункта отправления до ср c. Обратите внимание, что это , а не угол между направлениями «начало-до-1013 *» и «направление-направление-sr c».

Более того, Ogre::Radian angle - скалярное значение, угол в радианах, вы не можете получить матрицу вращения из этого значения (матрица, необходимая для выравнивания векторов)

...