Hi Ralf, Lower levels of detail aren't unreferenced but kept around in any paged database, this includes a osgTerrain::TerrainTile based paged database.
As how to manage the mapping of which physics tiles should be active... well I don't know what to recommend, there a lots of different ways you could probably tackle it. My job is the scene graph, I'll leave application dev issues to members of the community. Robert. On Mon, Apr 6, 2009 at 3:12 PM, Ralf Stokholm <[email protected]>wrote: > Hi Robert > > I have gotten a bit further with this, and there are some indications > it might be a viable solution. > > But I have run into a problem, it seams that Im not removing patches > from my physics engine when higher resolutions patches replaces them. > > Can You confirm that If a given osgTerrain::TerrainTile is replaced by > its four higher resolution children the acociated heightfields are not > deleted, and as a result the observer callback is not called? > > And if this is the case do you have any good ideas on how to figure > out when to disable these patches in the physics engine, so that I > dont have multiple patches loaded for the same area? > > Brgs. > > Ralf Stokholm > > 2009/4/3 Robert Osfield <[email protected]>: > > Hi Ralf, > > > > Use the osg::Observer mechanism for watching when objects get deleted. > Just > > register your observer with the TerrainTile/HeightField you've set up > your > > physics for then you'll be able to get your observer called when it goes > out > > of scope. osg::observert_ptr<> uses osg::Observer, as does osg::State > so > > have a look at these for usage of Observer. > > > > Robert. > > > > On Fri, Apr 3, 2009 at 11:44 AM, Ralf Stokholm <[email protected]> > > wrote: > >> > >> Hi Robert > >> > >> Its not that I need to keep the memmory around. > >> > >> I need to know when a terrain tile is unloaded from the scene and use > >> that event to unload the physics heightfield as well. > >> > >> Im guessing the life of a TerrainTile is similar to this: > >> > >> 1. Loaded/created by the database pager > >> 2. Added to the scenegraph by the databasepager. > >> 3. Disabled/hidden by the CullVisitor. > >> 4. Enabled/Shown by the CullVisitor. (possibly if it is only culled > >> out for a short time OSG 2.6.1) > >> 5. Unloaded/Destroyed. > >> > >> I need a way to catch at least event 1 and 5. Could this be done using > >> reference counting or is there a better way? > >> > >> Brgs. > >> > >> Ralf Stokholm > >> > >> 2009/4/3 Robert Osfield <[email protected]>: > >> > Hi Ralf, > >> > > >> > If you need to keep the memory around then use a ref_ptr<> to the > >> > HeightField, but... this will keep the memory around so if you do no > >> > longer > >> > need it you might want to implement a scheme to free it, such as > >> > watching > >> > when the ref count goes to one. > >> > > >> > The other approach is to use an observer_ptr<> that doesn't change the > >> > ref > >> > count of the HeightFiled, and gets reset to 0 when the HeightField get > >> > deleted. You can also use a custom osg::Observer to watch for object > >> > deletions as well. > >> > > >> > Robert > >> > > >> > On Fri, Apr 3, 2009 at 11:22 AM, Ralf Stokholm < > [email protected]> > >> > wrote: > >> >> > >> >> Hi Robert (list) > >> >> > >> >> Im trying to use the ReadFileCallback to load the heightfield int my > >> >> physics engine. > >> >> > >> >> So far I have been using a CullVisitor to grap the triangles from the > >> >> finished scene, but it has major drawback in that it forces me to > load > >> >> the data as meshes which is terrible for memmory and takes a long > time > >> >> to load. > >> >> > >> >> It seams im able to load the data as heightfields from the > >> >> ReadFileCallback, but this leads to my next problem. I need a way to > >> >> reference the data later, to be able to remove it when tiles are > >> >> deletet and disable it when tiles are disabled by the scene > >> >> cullvisitor. > >> >> > >> >> Is there a way to relate the nodes i visit in my ReadFileCallback to > >> >> nodes i visit in a special cullvisitor for the final scenegraph? > >> >> > >> >> Basically do you have any hints on how to syncronise the state of my > >> >> physics engine with the state of my Paged VPB terrain? > >> >> > >> >> Brgs. > >> >> > >> >> Ralf Stokholm > >> >> > >> >> > >> >> 2009/4/2 Ralf Stokholm <[email protected]>: > >> >> > Hi Robert > >> >> > > >> >> > Thanks a lot, was starting to get at this but using a more > primitive > >> >> > approach of running through all the children of the node that I did > >> >> > get. > >> >> > > >> >> > Will try to implement your method. > >> >> > > >> >> > Brgs. > >> >> > > >> >> > Ralf Stokholm > >> >> > > >> >> > 2009/4/2 Robert Osfield <[email protected]>: > >> >> >> Hi Ralf, > >> >> >> > >> >> >> You'll need to write a custom NodeVisitor that traverses through > the > >> >> >> loaded > >> >> >> scene graph and picks out the TerrainTile using dyanmic cast. It > >> >> >> just > >> >> >> so > >> >> >> happens that I'm actually working on a ReadFileCallback/custom > >> >> >> Visitor > >> >> >> that > >> >> >> does pick out all the TerrainTile's in a subgraph (there will > >> >> >> typically > >> >> >> be > >> >> >> one, two or four due to the quad tree structure generated by VPB.) > >> >> >> > >> >> >> The visitor looks like: > >> >> >> > >> >> >> class FindTerrainTileVisitor : public osg::NodeVisitor > >> >> >> { > >> >> >> public: > >> >> >> FindTerrainTileVisitor(): > >> >> >> osg::NodeVisitor(osg::NodeVisitor::TRAVERSE_ALL_CHILDREN) > >> >> >> { > >> >> >> } > >> >> >> > >> >> >> void reset() > >> >> >> { > >> >> >> _terrainTiles.clear(); > >> >> >> } > >> >> >> > >> >> >> void apply(osg::Group& group) > >> >> >> { > >> >> >> osgTerrain::TerrainTile* terrainTile = > >> >> >> dynamic_cast<osgTerrain::TerrainTile*>(&group); > >> >> >> if (terrainTile) > >> >> >> { > >> >> >> _terrainTiles.push_back(terrainTile); > >> >> >> } > >> >> >> else > >> >> >> { > >> >> >> traverse(group); > >> >> >> } > >> >> >> } > >> >> >> > >> >> >> typedef std::list< osg::ref_ptr<osgTerrain::TerrainTile> > > >> >> >> TerrainTiles; > >> >> >> TerrainTiles _terrainTiles; > >> >> >> }; > >> >> >> > >> >> >> The custom ReadFileCallback's readNode method looks like: > >> >> >> > >> >> >> virtual osgDB::ReaderWriter::ReadResult readNode(const > >> >> >> std::string& > >> >> >> filename, const osgDB::ReaderWriter::Options* options) > >> >> >> { > >> >> >> osg::notify(osg::NOTICE)<<"Loading tile > >> >> >> "<<filename<<std::endl; > >> >> >> osgDB::ReaderWriter::ReadResult result = > >> >> >> > >> >> >> > osgDB::Registry::instance()->readNodeImplementation(filename,options); > >> >> >> if (result.validNode()) > >> >> >> { > >> >> >> FindTerrainTileVisitor fttv; > >> >> >> result.getNode()->accept(fttv); > >> >> >> for(FindTerrainTileVisitor::TerrainTiles::iterator itr > = > >> >> >> fttv._terrainTiles.begin(); > >> >> >> itr != fttv._terrainTiles.end(); > >> >> >> ++itr) > >> >> >> { > >> >> >> osgTerrain::TerrainTile* terrainTile = itr->get(); > >> >> >> ///.... my stuff omitted, put your stuff here > >> >> >> } > >> >> >> } > >> >> >> } > >> >> >> > >> >> >> > >> >> >> Robert. > >> >> >> > >> >> >> On Thu, Apr 2, 2009 at 1:05 PM, Ralf Stokholm > >> >> >> <[email protected]> > >> >> >> wrote: > >> >> >>> > >> >> >>> Hi List > >> >> >>> > >> >> >>> Im trying to get the heightfiled data from a VPB terrain using > >> >> >>> ReadFileCallback. > >> >> >>> > >> >> >>> I use the code from readfile callback like this. > >> >> >>> > >> >> >>> class MyReadFileCallback : public > >> >> >>> osgDB::Registry::ReadFileCallback > >> >> >>> { > >> >> >>> public: > >> >> >>> virtual osgDB::ReaderWriter::ReadResult readNode(const > >> >> >>> std::string& fileName, const osgDB::ReaderWriter::Options* > options) > >> >> >>> { > >> >> >>> // note when calling the Registry to do the read you have > >> >> >>> to > >> >> >>> call readNodeImplementation NOT readNode, as this will > >> >> >>> // cause on infinite recusive loop. > >> >> >>> osgDB::ReaderWriter::ReadResult result = > >> >> >>> > >> >> >>> > osgDB::Registry::instance()->readNodeImplementation(fileName,options); > >> >> >>> if (result.validHeightField()) > >> >> >>> { > >> >> >>> LOG_ERROR("Found a valid HeightField"); > >> >> >>> } > >> >> >>> return result; > >> >> >>> } > >> >> >>> }; > >> >> >>> > >> >> >>> The idea was simply to see if I had the heightfield available, > but > >> >> >>> even though I have verified that it gets called it is never a > valid > >> >> >>> heightfield. > >> >> >>> > >> >> >>> This is on a terrain build using VPB with the --TERRAIN option. > >> >> >>> > >> >> >>> Shouldent I be able to get the heightfieldnodes? > >> >> >>> > >> >> >>> Brgs. > >> >> >>> > >> >> >>> Ralf Stokholm > >> >> >>> _______________________________________________ > >> >> >>> osg-users mailing list > >> >> >>> [email protected] > >> >> >>> > >> >> >>> > >> >> >>> > http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org > >> >> >> > >> >> >> > >> >> >> _______________________________________________ > >> >> >> osg-users mailing list > >> >> >> [email protected] > >> >> >> > >> >> >> > >> >> >> > http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org > >> >> >> > >> >> >> > >> >> > > >> >> _______________________________________________ > >> >> osg-users mailing list > >> >> [email protected] > >> >> > >> >> > http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org > >> > > >> > > >> > _______________________________________________ > >> > osg-users mailing list > >> > [email protected] > >> > > >> > > http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org > >> > > >> > > >> _______________________________________________ > >> osg-users mailing list > >> [email protected] > >> > http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org > > > > > > _______________________________________________ > > osg-users mailing list > > [email protected] > > > http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org > > > > > _______________________________________________ > osg-users mailing list > [email protected] > http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org >
_______________________________________________ osg-users mailing list [email protected] http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

