0

その場所(中心)でのマウスの左クリックと、マウスポインターの現在の場所から中心までの距離の動的半径で作成(移動)されるOSGで動的球を作成したい....

このため、osgGA::GUIEventHandler オブジェクトを作成し、仮想ハンドル関数を実装する必要があることは理解していますが、シーンから球体オブジェクト自体を見つけてその属性を変更するなどの他の詳細を見逃しています。

ピッキングの例も変更しようとしましたが、nodePath で球体を検出できなかったか、新しい球体を作成できませんでした

4

1 に答える 1

1

おそらく、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 の代わりにこれを追加することを忘れないでください。

于 2012-11-01T19:21:46.177 に答える