Hi Robert, So I should use a CullCallback to reimplement the PagedLOD::traverse() functionality, in order to request high level children. And I'd better use addCullCallback() to avoid overwriting of existing cull callbacks. Please correct me if there's any mistakes.
I think what you suggest is reasonable. Thank you. I'll better cancel my submission this time and try to find a better way ASAP. :) Wang Rui 2009/12/1 Robert Osfield <[email protected]>: > Hi Wang Rui, > > This submissions changes the LOD/PagedLOD to work like a switch rather > than an LOD which for me sounds at odds with their role in the scene > graph. Another issue is that if you wanted to mix a scene graph that > you are rendering with one that you want to take a screen capture for > one frame you would have a collision of state - the rendering one > would want the LOD/PagedLOD in a normal state while the screen capture > would want it in a high res version. > > How about using a custom cull NodeCallback to do the choice between > which children to traverse/request? Such a callback could potentially > work out what type of traversal is occurring an make a choice > accordingly. > > Thoughts? > Robert. > > > On Tue, Dec 1, 2009 at 7:29 AM, Wang Rui <[email protected]> wrote: >> Hi Robert, >> >> I've made some modifications on LOD and PagedLOD while working on the >> high-res screen autocapturing functionality (osgautocapture + >> osgposter example, but not finished). I just added a USER_SPECIFIED >> item to the range mode enumeration and a setActiveChild() method, to >> force load specified level of details instead of computing the >> distance from eyepoint, if needed be. >> >> To make it work, developers should change the range mode first, and >> then decide which child of the LOD node will become active: >> >> lod->setRangeMode( osg::LOD::USER_SPECIFIED ); >> lod->setActiveChild( 1 ); >> >> Child node at index 1 will be accepted (or automatically) in update >> and cull traversals, regardless of min/max range settings. >> >> And it's easy to reset: >> >> lod->setRangeMode( osg::LOD::DISTANCE_FROM_EYE_POINT ); >> >> This mechanism should be useful if we want to load specified level of >> a LOD node at some time. For instance, high-res capturing requires >> multiple projection matrices for sub-rendering cameras, but leaves the >> modelview matrix alone. In that case, we could either set the LOD >> scale to a very low value, or keep the camera close to the ground to >> obtain highest levels of a terrain with quadtree. But both are not >> good enough, I think. >> >> If it's possible to set the active child of a LOD or PagedLOD >> directly, a developer may force loading the highest levels of a >> limited area of terrain tiles and capture a sub-image, and then >> another area, until he collects all the sub-images and constructs the >> entire poster. This would be easier and much more efficient than >> loading the whole detailed terrain. What's your opinion? >> >> Cheers, >> >> Wang Rui >> >> _______________________________________________ >> osg-submissions mailing list >> [email protected] >> http://lists.openscenegraph.org/listinfo.cgi/osg-submissions-openscenegraph.org >> >> > _______________________________________________ > osg-submissions mailing list > [email protected] > http://lists.openscenegraph.org/listinfo.cgi/osg-submissions-openscenegraph.org > _______________________________________________ osg-submissions mailing list [email protected] http://lists.openscenegraph.org/listinfo.cgi/osg-submissions-openscenegraph.org
