Hi PP,

Thanks for your answer!!! I try to undesrtand you but i dont get it at all...

Code:

struct FilterCullCallback : osg::NodeCallback {
virtual void operator()(osg::Node* node, osg::NodeVisitor* nv) {}
// do nothing and stop traverse
}; 
void MorphManager::setMorphs(std::vector<std::pair<std::string,std::string>> 
morphs, OSGGroup * modelNode,
                                                                
std::vector<std::string> origMorphParts, std::string dataPath)
{
        _morphsGrp = new osg::Switch();
        _modelNode = modelNode;

        _morphParts = origMorphParts;
        for(int i=0;i<_morphParts.size();i++)
        {
                osg::ref_ptr<osg::Node> morphNode;
                if(_morphParts[i].compare(""))
                        morphNode = 
_modelNode->findGeodeNode(_morphParts[i]).get();
                if(morphNode.valid()){
                        OSGRigGeometryFinder rigGeometryFinder ;
                        morphNode->accept( rigGeometryFinder ) ;
                        osg::ref_ptr<osgAnimation::RigGeometry> morphGeom = 
rigGeometryFinder.getRigGeometry();
                        _geometryBases.push_back(morphGeom);
                        // Disable Display lists and setup Vertex Buffer Objects
                        _geometryBases.back()->setUseDisplayList (false);
                        _geometryBases.back()->setUseVertexBufferObjects(true);
                        
_geometryBases.back()->setDataVariance(osg::Object::DYNAMIC);   
_geometryBasesOrig.push_back(dynamic_cast<osgAnimation::RigGeometry*>(morphGeom->clone(
 osg::CopyOp::DEEP_COPY_ALL)));
                        std::vector<osg::ref_ptr<osgAnimation::MorphGeometry>> 
morphGeometrys;
                }
                else
                        printf("erro finding morph target in the model, 
%s\n",_morphParts[i].c_str());
        }

        if(_geometryBasesOrig.size()>0){
                _morphsGrp->setCullCallback( new FilterCullCallback() ) ;
                for(int i=0;i<morphs.size();i++)
                {
                        printf(".......reading morph %s...", 
morphs[i].first.c_str());
                        std::string mophPath = dataPath + morphs[i].second;
                        OSGGroup * morphShape = 
OSGFileReader::readNodeFile(mophPath);
                        if(morphShape->getNumChildren()>0){
                                morphShape->setUpdateCallback( new 
osgAnimation::UpdateMorph(morphs[i].first) ) ;
                                _morphsGrp->addChild(morphShape);
                                std::vector<osg::ref_ptr<osg::Geometry>> 
morphGeometry;
                                for(int j=0;j<_morphParts.size();j++)
                                {



I get the rigid geometry model nodes pointers 
Code:
osg::ref_ptr<osgAnimation::RigGeometry> morphGeom = 
rigGeometryFinder.getRigGeometry();
                        _geometryBases.push_back(morphGeom);

 and I need to manipulate thems in earch time steps... 
Why we need osgANimation::UpdateMorph??? and why is necesary add to the scene 
the diferent morph geometries???

Thank you!

Cheers,
Aitor

------------------
Read this topic online here:
http://forum.openscenegraph.org/viewtopic.php?p=43564#43564





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

Reply via email to