Hi all -- I have a scene graph containing multiple static transforms. My
application runs the osgUtil::Optimizer on this scene graph. This should
flatten all the static transforms. Unfortunately, the result is that all the
transforms flatten _except_ for the top level transform. If I do an osgconv
on this same scene graph, all the static transforms flatten -- they are
converted to Group nodes, and their transformations are folded into the
geometry. Clearly, the issue isn't with the scene graph itself, but it's
something my app is doing wrong when it invokes the Optimizer. My dilemma:
why doesn't this work properly for osgconv, but not for my app?
 
I have dug into this for quite some time now, trying to uncover the
difference between osgconv (which works) and my code (which doesn't work).
Here's what I know so far:
 
* I've written a small test app to try to reproduce the problem. It loads
the scene graph, runs the Optimizer, and writes the scene graph back out.
Unfortunately, it works properly, just like osgconv. It flattens all the
transforms. I'm unable to reproduce the problem in anything other than my
(larger) application. This must be a bug in my code, I must be doing
something wrong.
 
* I have verified that the problem is not non-STATIC transforms, multiple
parents, or ProxyNodes. The same scene graph works fine in osgconv and my
little test app, so it isn't a scene graph issue. I believe my app handles
the scene graph the same as in these other two apps, which work.
 
* Yes I'm invoking the Optimizer the same way, with no flags. I'm sure that
the OSG_OPTIMIZER variable is not set in the environment. I get the same
behavior if I just pass the FLATTEN_STATIC_TRANSFORMS flag (top level node
fails to flatten). If I set OSG_OPTIMIZER=FLATTEN_STATIC_TRANSFORMS and run
osgconv, it still works properly and flattens all transforms.
 
* ObjectStruct has a Boolean called _moreThanOneMatrixRequired. In my app,
this gets set to true at Optimizer.cpp line 826. This doesn't happen when
running osgconv or my small test code. This seems to be part of the problem,
but the root cause that triggers this event is still unknown to me.
 
I'll attach the scene graph in question, though I doubt it will do anyone
much good, because it works fine in osgconv and my simple test app. It only
fails in my larger app. Note the top level Node named "CenterOfMassOffset";
this is the transform that refuses to flatten.
 
I'm wondering if anyone has encountered the same issue before, has any info
on how to resolve the issue, or might know how to proceed with debugging it.
Notify level DEBUG_INFO does not produce any enlightening information.
 
I admit I'm stumped on this one. It's extremely out of the ordinary when OSG
doesn't just do what I expect it to. I appreciate any info.
 
Thanks,
 
Paul Martz
Skew Matrix Software LLC
http://www.skew-matrix.com <http://www.skew-matrix.com/> 
+1 303 859 9466
 

Attachment: out1.osg
Description: Binary data

_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

Reply via email to