20,741
edits
Line 222: | Line 222: | ||
=== Sharing scenes === | === Sharing scenes === | ||
The osgViewer has a mechanism for avoid multiple traversals of shared | |||
scene graphs if mutlple View's share the same root node of the scene | |||
graph. If shared component isn't the topmost node then the OSG has no | |||
straight forward way to know whether a subgraph has been traversed or | |||
not that frame. One could implement a mechanism to avoid this | |||
visiting a node multiple times in one frame but it would be really | |||
costly to do, an expense that would only be a benefit for a very small | |||
number of users, but would slow performance for everyone else. | |||
If you have a shared subgraph that you don't want traversed multiple | |||
times per frame then use an UpdateCallback that has a frameNumber | |||
member variable that keep track of the the frameNumber (use | |||
NodeVisitor::getFrameStamp()'s FrameNumber) of the last traversal, | |||
when a traversal calls the update callback you only traverse the | |||
subgraph if the frameNumber is different and then set the frameNumber | |||
to the present frame, if the frameNumber is the same then you just | |||
return immediately. This custom UpdateCallback you'd place as high as | |||
you can in your scene graph to make sure the traversal stops as soon | |||
as possible. | |||
Another approach is to move this frameNumber tracking into your | |||
existing update callbacks, and simple return right away with the | |||
frameNumber is the same. This requires a small tweak to the callbacks | |||
but is such a small change it's generally pretty easy to integrate.<ref>https://www.mail-archive.com/osg-users@lists.openscenegraph.org/msg74476.html</ref> | |||
* Each View has one scene graph, and can share its scene graph between other instances of View. The View can also share the same GraphicsWindow, or have its own GraphicsWindow. The View also has a master Camera, and an optional list of slave Camera so you can scale from simple views up to complete distortion correction or multiple display output setups. Each View has its own event handlers and cameras handlers. Its extremely flexible and configurable. <ref>https://groups.google.com/d/msg/osg-users/kmSNMm6w008/zBBunL-VRJsJ</ref> | * Each View has one scene graph, and can share its scene graph between other instances of View. The View can also share the same GraphicsWindow, or have its own GraphicsWindow. The View also has a master Camera, and an optional list of slave Camera so you can scale from simple views up to complete distortion correction or multiple display output setups. Each View has its own event handlers and cameras handlers. Its extremely flexible and configurable. <ref>https://groups.google.com/d/msg/osg-users/kmSNMm6w008/zBBunL-VRJsJ</ref> | ||
* sharing a scene between View's is OK within one CompositeViewer as they will Views on the same scene will share the same FrameStamp i.e. there will be all at the same point in time. Sharing one scene between multiple Viewers will hit up against the problem that in one set of traversals the scene graph is one time and then the traversals from the other viewer will try to change the time back - and likely to cause a mess. This timing issue isn't likely to cause problems with high level rendering though - it should just mess up things like particle systems and sequences.<ref>https://www.mail-archive.com/osg-users@lists.openscenegraph.org/msg07305.html</ref> | * sharing a scene between View's is OK within one CompositeViewer as they will Views on the same scene will share the same FrameStamp i.e. there will be all at the same point in time. Sharing one scene between multiple Viewers will hit up against the problem that in one set of traversals the scene graph is one time and then the traversals from the other viewer will try to change the time back - and likely to cause a mess. This timing issue isn't likely to cause problems with high level rendering though - it should just mess up things like particle systems and sequences.<ref>https://www.mail-archive.com/osg-users@lists.openscenegraph.org/msg07305.html</ref> |