From d4926589dc972854c99fb2269d4bfdfd2fee43e3 Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Sat, 10 Nov 2001 13:36:05 +0000 Subject: [PATCH] Fixed bug related to osgUtil::Optimizer::FlatternStaticTransform::Visitor's apply(Billboard& ) method which was apply the accumulated transform to the billbaord geometry when it should have been applying the matrix without the transform component. --- src/osgUtil/Optimizer.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/osgUtil/Optimizer.cpp b/src/osgUtil/Optimizer.cpp index 19cd730ac..db6ff5d8a 100644 --- a/src/osgUtil/Optimizer.cpp +++ b/src/osgUtil/Optimizer.cpp @@ -306,9 +306,13 @@ void Optimizer::FlattenStaticTransformsVisitor::apply(osg::Billboard& billboard) if (!_matrixStack.empty()) { osg::Matrix& matrix = _matrixStack.back(); - TransformFunctor tf(matrix); + osg::Matrix matrix_no_trans = matrix; + matrix_no_trans.setTrans(0.0f,0.0f,0.0f); + + TransformFunctor tf(matrix_no_trans); osg::Vec3 axis = osg::Matrix::transform3x3(tf._im,billboard.getAxis()); + axis.normalize(); billboard.setAxis(axis); for(int i=0;iapplyAttributeOperation(tf); } + + billboard.dirtyBound(); } } @@ -324,6 +330,7 @@ void Optimizer::FlattenStaticTransformsVisitor::apply(osg::LOD& lod) if (!_matrixStack.empty()) { lod.setCenter(lod.getCenter()*_matrixStack.back()); + lod.dirtyBound(); } traverse(lod); } @@ -345,6 +352,8 @@ void Optimizer::FlattenStaticTransformsVisitor::apply(osg::Transform& transform) // reset the matrix to identity. transform.getMatrix().makeIdent(); + + transform.dirtyBound(); _matrixStack.pop_back(); }