[osg-users] How to remove a node from its callback function?

Dark Zero laserae86 at 126.com
Mon Jun 1 19:13:06 PDT 2015


Hi,

There is a Geode whose Geometry is a ball with a MatrixTransform() assigned above it. It's callback function makes it falls. When the ball intersects with the ground, I hope to remove it from the scene.

The following code throws exception:


Code:

//inside the ball's callback

virtual void operator()(osg::Node* node ,osg::NodeVisitor* nv)
{
    using namespace osg;
    MatrixTransform* matrix_node = dynamic_cast<MatrixTransform*>(node);
    Matrix matrix = matrix_node->getMatrix();

    velocity += Vec3(0, 0, -0.002);

    matrix.postMultTranslate(velocity);

    matrix_node->setMatrix(matrix);

    Vec3 now_position = start_position * matrix;

    osgUtil::IntersectVisitor ivXY; 

    osg::ref_ptr<osg::LineSegment> lineXY = new osg::LineSegment(now_position, now_position+velocity); 

    ivXY.addLineSegment(lineXY);

    GAME.main_camera->m_pHostViewer->getSceneData()->accept(ivXY) ;
    if(ivXY.hits())
    {
        node->getParent(0)->removeChild(node);
    }
    return;
}




How to do it correctly? Thank you!

... 

Cheers,
DarkZero

------------------
Read this topic online here:
http://forum.openscenegraph.org/viewtopic.php?p=63915#63915








More information about the osg-users mailing list