If I am not mistaken, you will have to run your own vertex shaders in order to do hardware animation skinning. The osganimationhardware example provides a very basic example of doing so.
This may mean that your shader might have to be hardcoded to work with a specific 3D model (bone structure) only. Christian 2015-01-05 13:16 GMT+01:00 Chris Hidden <[email protected]>: > Happy new years everyone! Hope everyone had a great holidays! > > I just wanted to update this thread and bump it as I am now doing some > further tweaking on getting things running optimally. > > I narrowed down some things, and I now have ONLY the hands being rendered > in release mode. I get around 45 fps.. which is ok, but I would like to > see it higher. Unless I am vastly overestimating the capability of this it > should be able to render the hands up close to 60 fps on release mode. > > I've tested running only the API without rendering the hands and the frame > rate stays a solid 58-60 fps. The moment I add the hands to the scene and > they move around the FR drops to around 45. So I know the sensor data is > not the source of the delay. > > I tried a traversal class that runs through the hand model. (Hand model > is an FBX class with baked in texture and rigging exported from 3DS max) > hoping to do all the work on the GPU: > > > Code: > > class VBO_Updater : public osg::NodeVisitor > { > > public: > VBO_Updater() > : NodeVisitor(NodeVisitor::TRAVERSE_ALL_CHILDREN) > {} > ~VBO_Updater(){} > virtual void apply(osg::Node &node) > { > traverse(node); > } > > virtual void apply(osg::Geode &geode) > { > unsigned int numGeoms = geode.getNumDrawables(); > > for (unsigned int i = 0; i < numGeoms; i++) > { > osg::ref_ptr<osg::Geometry> curGeom = > geode.getDrawable(i)->asGeometry(); > > if (curGeom) > { > curGeom->setUseDisplayList(false); > curGeom->setUseVertexBufferObjects(true); > osg::ref_ptr<VertexBufferObject> df = > curGeom->getOrCreateVertexBufferObject(); > df->setUsage(GL_STREAM_DRAW); > osg::ref_ptr<osg::StateSet> stateset = > curGeom->getOrCreateStateSet(); > stateset->setAttributeAndModes(new > osg::CullFace()); > } > } > > } > > private: > > }; > > > > > But this didn't seem to do anything for the frame rate. I assume that the > fbx model is still not being skinned on the GPU. How do I make sure that > the GPU is doing the hard work and not the CPU? > > ------------------ > Read this topic online here: > http://forum.openscenegraph.org/viewtopic.php?p=62226#62226 > > > > > > _______________________________________________ > 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

