Создание динамической сферы в ОСГ

Я хочу создать динамическую сферу в OSG, которая была бы создана (перемещена) щелчком левой кнопки мыши в этом месте (в центре) и с динамическим радиусом расстояния текущего местоположения указателя мыши до центра ….

Я понимаю, что по этой причине мне нужно создать объект osgGA :: GUIEventHandler и реализовать функцию виртуального дескриптора, но я скучаю по другим деталям, таким как поиск объекта сферы из сцены и изменение его атрибутов.

Я тоже пытался изменить Пример комплектации но не удалось обнаружить сферу в nodePath или создать новую сферу

0

Решение

Вероятно, я бы начал с создания пользовательского класса, производного от одного из классов манипулятора osgGA.

Вы захотите переопределить метод handle () примерно так:

bool CustomManipulator::handle(const osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdapter& aa)
{
using namespace osgGA;

if (ea.getEventType()==GUIEventAdapter::FRAME)
{
if (_thrown) aa.requestRedraw();
}
else if (ea.getEventType()==GUIEventAdapter::PUSH)
{
// check if your sphere is picked using LineSegmentIntersector
// (like in the picking example) and set a flag
}
else if (ea.getEventType()==GUIEventAdapter::DRAG)
{
// update the position and radius of your sphere if the flag was set
}
else if (ea.getEventType()==GUIEventAdapter::RELEASE)
{
// release the sphere, unset the flag
}
return false;
}

Затем не забудьте использовать setCameraManipulator () в вашей программе просмотра, чтобы добавить это вместо TrackballManipulator по умолчанию.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]