diff --git a/src/osgUtil/IntersectionVisitor.cpp b/src/osgUtil/IntersectionVisitor.cpp index c0ba40f45..74dae41bc 100644 --- a/src/osgUtil/IntersectionVisitor.cpp +++ b/src/osgUtil/IntersectionVisitor.cpp @@ -250,12 +250,17 @@ void IntersectionVisitor::apply(osg::Billboard& billboard) for(unsigned int i = 0; i < billboard.getNumDrawables(); i++ ) { const osg::Vec3& pos = billboard.getPosition(i); - osg::ref_ptr billboard_matrix = _modelStack.empty() ? - new osg::RefMatrix : - new osg::RefMatrix(*_modelStack.back()); + osg::ref_ptr billboard_matrix = new osg::RefMatrix; + if (getViewMatrix()) + { + if (getModelMatrix()) billboard_matrix->mult( *getModelMatrix(), *getViewMatrix() ); + else billboard_matrix->set( *getViewMatrix() ); + } + else if (getModelMatrix()) billboard_matrix->set( *getModelMatrix() ); billboard.computeMatrix(*billboard_matrix,eye_local,pos); - + + if (getViewMatrix()) billboard_matrix->postMult( osg::Matrix::inverse(*getViewMatrix()) ); pushModelMatrix(billboard_matrix.get()); // now push an new intersector clone transform to the new local coordinates