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