おそらく、osgGA Manipulator クラスの 1 つから派生したカスタム クラスを作成することから始めるでしょう。
次のようなもので 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 の代わりにこれを追加することを忘れないでください。