我要发帖 回复

正式会员

6

主题

62

积分

0

专家分

老手

:

私信
发表时间 : 2009-11-30 10:34:08 | 浏览 : 1596    评论 : 1
在一个模型里有一个LOD节点,可以通过节点访问器来找到,它下面有三个几何节点,但LOD的子节点数总为1,找不到一个几何节点,请教高人是怎么回事?我的节点查找类如下:(查找DOF、Switch、Group都可以)

class findNodeVisitor : public osg::NodeVisitor
{
public:
        findNodeVisitor();
        findNodeVisitor(const std::string &searchName);
        virtual void apply(osg::Node &searchNode);
        void setNameToFind(const std::string &searchName);
        osg::Node* getFirst();
        typedef std::vector<osg::Node*> nodeListType;
        nodeListType& getNodeList() { return m_foundNodeList; }
        static osg::Node* FindNamed(osg::Node* pParent,const std::string& strName);
private:
        std::string m_strSearchForName;
        nodeListType m_foundNodeList;
};

findNodeVisitor::findNodeVisitor(const std::string &searchName) :
osg::NodeVisitor(osg::NodeVisitor::TRAVERSE_ALL_CHILDREN),
m_strSearchForName(searchName)
{
}
//The 'apply' method for 'node' type instances.
//Compare the 'searchForName' data member against the node's name.
//If the strings match, add this node to our list
void findNodeVisitor::apply(osg::Node &searchNode)
{
        if (searchNode.getName() == m_strSearchForName)
        {
                m_foundNodeList.push_back(&searchNode);
        }
        traverse(searchNode);
}
// Set the searchForName to user-defined string
void findNodeVisitor::setNameToFind(const std::string &searchName)
{
        m_strSearchForName = searchName;
        m_foundNodeList.clear();  
}
osg::Node* findNodeVisitor::getFirst()
{
        if(!m_foundNodeList.empty())
        {
                return *(m_foundNodeList.begin());
        }
        else
        {
                return NULL;
        }
}
osg::Node* findNodeVisitor::FindNamed(osg::Node* pParent,const std::string& strName)
{
        if(pParent==NULL)
        {
                printf("ERROR(findNodeVisitor): Node to be Searched is NULL.\n");
                return NULL;
        }
        findNodeVisitor visitor(strName);
        pParent->accept(visitor);
        return visitor.getFirst();
}

最近VR访客

FlySky 评论于2009-11-30 20:14:20
请你参考海军教程里面的节点查找吧~~apply应该也要应用到osg::Lod节点~~~

OSG中国官方网站:http://www.osgChina.org
OSG中国官方讨论区:http://bbs.osgChina.org

OSG专业群-OSG地形研究者 49668412
      OSG地形专业研究 45763709

手机版|VR开发网 统计 津ICP备18009691号
网安备12019202000257

GMT+8, 2021-2-25 04:04 PM

返回顶部