Updated the Optimzer::FatternStaticTransform visit so by default it ignores

all dynamic transforms, previously it flattened dynamic transforms as well.
This commit is contained in:
Robert Osfield
2001-12-17 15:05:06 +00:00
parent 61643f2ae9
commit bc49a83c51
4 changed files with 34 additions and 20 deletions

View File

@@ -77,8 +77,8 @@ bool Transform_writeLocalData(const Object& obj, Output& fw)
switch(transform.getType())
{
case(osg::Transform::STATIC): fw.indent() << "Type STATIC" << std::endl;
default: fw.indent() << "Type DYNAMIC" << std::endl;
case(osg::Transform::STATIC): fw.indent() << "Type STATIC" << std::endl;break;
default: fw.indent() << "Type DYNAMIC" << std::endl;break;
}
fw.writeObject(transform.getMatrix());

View File

@@ -353,25 +353,32 @@ void Optimizer::FlattenStaticTransformsVisitor::apply(osg::LOD& lod)
void Optimizer::FlattenStaticTransformsVisitor::apply(osg::Transform& transform)
{
if (_matrixStack.empty())
if (_ignoreDynamicTransforms && transform.getType()==osg::Transform::DYNAMIC)
{
_matrixStack.push_back(transform.getMatrix());
// simple traverse the children as if this Transform didn't exist.
traverse(transform);
}
else
{
_matrixStack.push_back(transform.getMatrix()*_matrixStack.back());
{
if (_matrixStack.empty())
{
_matrixStack.push_back(transform.getMatrix());
}
else
{
_matrixStack.push_back(transform.getMatrix()*_matrixStack.back());
}
_transformList.insert(&transform);
// simple traverse the children as if this Transform didn't exist.
traverse(transform);
// reset the matrix to identity.
transform.setMatrix(osg::Matrix::identity());
_matrixStack.pop_back();
}
traverse(transform);
_transformList.insert(&transform);
// reset the matrix to identity.
transform.setMatrix(osg::Matrix::identity());
transform.dirtyBound();
_matrixStack.pop_back();
}
void Optimizer::FlattenStaticTransformsVisitor::removeTransforms()