调试最长的一帧(第22天)

先看看全流程

调试最长的一帧(第22天)_第1张图片

 

调试最长的一帧(第22天)_第2张图片

 

先抄一抄节点访问器NodeVisitor的工作原理.当我们执行节点的accept(NodeVisitor* nv)函数时,当前节点自动调哟个NodeVisitor::apply方法,将自身的信息传递给节点访问器nv,由它负责执行相应的处理工作;然后节点将自动执行Node::traverse函数,调用所有子节点的accept函数,从而实现了节点数的遍历。在遍历的过程中,每个节点都会调用NodeVisitor::apply,将自身的指针传递给访问器,因此,NodeVisitor的每个派生类都会重载针对各个节点的apply函数,以实现针对不同类型节点的访问操作。

 

来个最简单的不向下走,调用

调试最长的一帧(第22天)_第3张图片

调试最长的一帧(第22天)_第4张图片

可以看到,apply()是accept调用的

调试最长的一帧(第22天)_第5张图片

调试最长的一帧(第22天)_第6张图片

调试最长的一帧(第22天)_第7张图片

调试最长的一帧(第22天)_第8张图片

调试最长的一帧(第22天)_第9张图片

调试最长的一帧(第22天)_第10张图片

 

调试最长的一帧(第22天)_第11张图片

下一步接下来递归调用


#include
#include
#include
#include

using namespace osg;
class myVisitor : public osg::NodeVisitor
{
public:
    myVisitor() : NodeVisitor(TRAVERSE_ALL_CHILDREN)
    {

    }
    virtual void apply(Node& node)
    {
        std::string strName = node.getName();
        std::cout << strName << std::endl;
        traverse(node);
    }
    virtual void apply(Group& grp)
    {
        std::string strName = grp.getName();
        std::cout << strName << std::endl;
        traverse(grp);
    }
    virtual void apply(Geode& geode)
    {
        std::string strName = geode.getName();
        std::cout << strName << std::endl;
        traverse(geode);
    }
};
int main()
{
    osg::ref_ptr node = new osg::Node;
    node->setName("node");
    osg::ref_ptr geode = new osg::Geode;
    geode->setName("geode");
    osg::ref_ptr group = new osg::Group;
    group->addChild(node.get());
    group->addChild(geode.get());
    group->setName("group");
    myVisitor nv;
    group->accept(nv);
    return 0;
}

 

调试最长的一帧(第22天)_第12张图片

调试最长的一帧(第22天)_第13张图片

 

调试最长的一帧(第22天)_第14张图片

调试最长的一帧(第22天)_第15张图片

 

调试最长的一帧(第22天)_第16张图片

调试最长的一帧(第22天)_第17张图片

调试最长的一帧(第22天)_第18张图片

调试最长的一帧(第22天)_第19张图片

调试最长的一帧(第22天)_第20张图片

调试最长的一帧(第22天)_第21张图片

调试最长的一帧(第22天)_第22张图片

调试最长的一帧(第22天)_第23张图片

调试最长的一帧(第22天)_第24张图片

调试最长的一帧(第22天)_第25张图片

 

运行结果

调试最长的一帧(第22天)_第26张图片

继续抄抄电子书,筛选访问器(cullvisitor)的重载函数针对Geode,Billboard,LightSource,ClipNode,TexGenNode,Group,Transform,Projection,Switch,LOD,ClearNode,Camera,OccluderNode,OcclusionQueryode以及通用的Node类节点执行了相应的筛选工作

调试最长的一帧(第22天)_第27张图片

调试最长的一帧(第22天)_第28张图片

 

下面进行cullVisitor的使用

调试最长的一帧(第22天)_第29张图片

 

调试最长的一帧(第22天)_第30张图片

 

调试最长的一帧(第22天)_第31张图片

调试最长的一帧(第22天)_第32张图片

 

可以通过Node::setCullingActive()保持节点Node永远不会被删除

调试最长的一帧(第22天)_第33张图片

 

调试最长的一帧(第22天)_第34张图片

 

调试最长的一帧(第22天)_第35张图片

 

调试最长的一帧(第22天)_第36张图片

看看几个相关的成员变量,

调试最长的一帧(第22天)_第37张图片

 

 

调试最长的一帧(第22天)_第38张图片

调试最长的一帧(第22天)_第39张图片

 

调试最长的一帧(第22天)_第40张图片

调试最长的一帧(第22天)_第41张图片

调试最长的一帧(第22天)_第42张图片

调试最长的一帧(第22天)_第43张图片

调试最长的一帧(第22天)_第44张图片

调试最长的一帧(第22天)_第45张图片

调试最长的一帧(第22天)_第46张图片

调试最长的一帧(第22天)_第47张图片

 

调试最长的一帧(第22天)_第48张图片

调试最长的一帧(第22天)_第49张图片

调试最长的一帧(第22天)_第50张图片

调试最长的一帧(第22天)_第51张图片

 

电子书上介绍了其它几种。

调试最长的一帧(第22天)_第52张图片

它的不同之处在于

调试最长的一帧(第22天)_第53张图片

调试最长的一帧(第22天)_第54张图片

调试最长的一帧(第22天)_第55张图片

调试最长的一帧(第22天)_第56张图片

调试最长的一帧(第22天)_第57张图片

调试最长的一帧(第22天)_第58张图片

调试最长的一帧(第22天)_第59张图片

调试最长的一帧(第22天)_第60张图片

调试最长的一帧(第22天)_第61张图片

调试最长的一帧(第22天)_第62张图片

调试最长的一帧(第22天)_第63张图片

调试最长的一帧(第22天)_第64张图片

调试最长的一帧(第22天)_第65张图片

调试最长的一帧(第22天)_第66张图片

 

对于Geode节点

调试最长的一帧(第22天)_第67张图片

不同的地方如下

调试最长的一帧(第22天)_第68张图片

调试最长的一帧(第22天)_第69张图片

调试最长的一帧(第22天)_第70张图片

调试最长的一帧(第22天)_第71张图片

调试最长的一帧(第22天)_第72张图片

调试最长的一帧(第22天)_第73张图片

调试最长的一帧(第22天)_第74张图片

调试最长的一帧(第22天)_第75张图片

调试最长的一帧(第22天)_第76张图片

调试最长的一帧(第22天)_第77张图片

调试最长的一帧(第22天)_第78张图片

调试最长的一帧(第22天)_第79张图片

调试最长的一帧(第22天)_第80张图片

调试最长的一帧(第22天)_第81张图片

调试最长的一帧(第22天)_第82张图片

 

当场景树中出现一个摄像机节点时它以下的场景子树将按照这恶摄像机的筛选、视口、观察矩阵和投影矩阵设置进行显示。我们也可以使用此摄像机指向另一个图形设备(窗口),Camera节点的特性使得HUD文字,鹰眼图等效果都可以在OSG的场景中轻松实现。

除去类似的步骤,具体如下

调试最长的一帧(第22天)_第83张图片

调试最长的一帧(第22天)_第84张图片

调试最长的一帧(第22天)_第85张图片

 

调试最长的一帧(第22天)_第86张图片

 

调试最长的一帧(第22天)_第87张图片

调试最长的一帧(第22天)_第88张图片

 

调试最长的一帧(第22天)_第89张图片

调试最长的一帧(第22天)_第90张图片

调试最长的一帧(第22天)_第91张图片

调试最长的一帧(第22天)_第92张图片

调试最长的一帧(第22天)_第93张图片

调试最长的一帧(第22天)_第94张图片

调试最长的一帧(第22天)_第95张图片

调试最长的一帧(第22天)_第96张图片

 

调试最长的一帧(第22天)_第97张图片

调试最长的一帧(第22天)_第98张图片

调试最长的一帧(第22天)_第99张图片

调试最长的一帧(第22天)_第100张图片

 

调试最长的一帧(第22天)_第101张图片

调试最长的一帧(第22天)_第102张图片

调试最长的一帧(第22天)_第103张图片

 

调试最长的一帧(第22天)_第104张图片

调试最长的一帧(第22天)_第105张图片

调试最长的一帧(第22天)_第106张图片

 

调试最长的一帧(第22天)_第107张图片

调试最长的一帧(第22天)_第108张图片

调试最长的一帧(第22天)_第109张图片

调试最长的一帧(第22天)_第110张图片

调试最长的一帧(第22天)_第111张图片

 

 

你可能感兴趣的:(osg例子调试,《最长的一帧》学习)