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:
3
AUTHORS
3
AUTHORS
@@ -80,6 +80,9 @@ Henry Maddocks <henryj@paradise.net.nz>
|
||||
Paul Fredrikson
|
||||
- new Matrix implementation.
|
||||
|
||||
Sasa Bistrivic <sasa.bistrovic@zg.hinet.hr>
|
||||
- option for detailed calculation of the near clipping plane during cull traversal.
|
||||
|
||||
Indirect Contributors
|
||||
---------------------
|
||||
|
||||
|
||||
@@ -49,12 +49,16 @@ class OSGUTIL_EXPORT Optimizer
|
||||
public:
|
||||
|
||||
typedef std::vector<osg::Matrix> MatrixStack;
|
||||
MatrixStack _matrixStack;
|
||||
|
||||
typedef std::set<osg::Transform*> TransformList;
|
||||
TransformList _transformList;
|
||||
|
||||
MatrixStack _matrixStack;
|
||||
TransformList _transformList;
|
||||
bool _ignoreDynamicTransforms;
|
||||
|
||||
FlattenStaticTransformsVisitor():osg::NodeVisitor(osg::NodeVisitor::TRAVERSE_ALL_CHILDREN) {}
|
||||
FlattenStaticTransformsVisitor(bool ignoreDynamicTransforms=true):
|
||||
osg::NodeVisitor(osg::NodeVisitor::TRAVERSE_ALL_CHILDREN),
|
||||
_ignoreDynamicTransforms(ignoreDynamicTransforms) {}
|
||||
|
||||
virtual void apply(osg::Geode& geode);
|
||||
virtual void apply(osg::Billboard& billboard);
|
||||
|
||||
@@ -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());
|
||||
|
||||
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user