本文所有内容来自《OpenSceneGraph三维渲染引擎设计与实践》一书。

  本文主要讨论的是OSG中节点的访问。

  对于节点的访问是从节点接收一个访问器开始的,用户执行某个节点的accept()函数,将一个具体的访问器对象传递给节点。

  第二步,节点反过来执行访问器的apply()函数,并将自身传入访问器。

  这两步的实现过程可以用一行十分简单的函数代码来表达:

void Node::accept(NodeVisitor& nv)
{
nv.apply(*this);
}

  下面是一个具体的访问节点的例子:

#include <osg/Node>
#include <osgDB/ReadFile>
#include <iostream> class InfoVisitor: public osg::NodeVisitor
{
public:
InfoVisitor():osg::NodeVisitor(TRAVERSE_ALL_CHILDREN), _indent(){} virtual void apply(osg::Node &node)
{
for (int i = ; i < _indent; ++i)
std::cout<<" ";
std::cout<<"["<<_indent + <<"]"<<node.libraryName()
<<"::"<<node.className()<<std::endl; _indent++;
traverse(node);
_indent--;
} virtual void apply(osg::Geode &node)
{
for (int i = ; i < _indent; ++i)
std::cout<<" ";
std::cout<<"["<<_indent + <<"]"<<node.libraryName()
<<"::"<<node.className()<<std::endl; for (unsigned int n = ; n < node.getNumDrawables(); ++n)
{
osg::Drawable *drawable = node.getDrawable(n);
if (!drawable)
continue;
for (int i = ; i < _indent; ++i)
std::cout<<" ";
std::cout<<drawable->libraryName()
<<"::"<<drawable->className()<<std::endl;
}
_indent++;
traverse(node);
_indent--;
}
protected:
int _indent;
}; int main()
{
osg::Node *root = osgDB::readNodeFile("osgcool.osgt");
InfoVisitor infoVisitor;
if(root)
root->accept(infoVisitor);
return ;
}

  继续学习OSG,吼吼

最新文章

  1. ASP.NET WebApi 文档Swagger中度优化
  2. JS 中 Array.slice() 和 Array.splice()方法
  3. 查看 Apache并发请求数及其TCP连接状态
  4. emacs 新手笔记(四) —— 使用 dired 完成一些简单的文件和目录操作
  5. 1-5Tomcat 目录结构 和 web项目目录结构
  6. dubbo Linux 解决:nc: command not found
  7. python os.walk()和os.path.walk()
  8. MySQL join buffer使用
  9. BZOJ3190[JLOI2013]赛车
  10. ACM、OI等比赛中的程序对拍问题
  11. C#控件TabControl隐藏page
  12. 类似QtiPlot的veusz,sigmaplot,pymol
  13. Cookie与Passport安全
  14. 【Windows 10 应用开发】如何防止应用程序被截屏
  15. class 选择器
  16. 项目Alpha冲刺Day3
  17. VS2010+OpenCV3.4.1+zbar 64位
  18. Powerdesigner数据库建模的浅谈
  19. Windows下使用创建多层文件夹 SHCreateDirectoryEx 函数需要注意的问题
  20. e807. 设置进程监听对话框的延迟弹出

热门文章

  1. matplotlib locators
  2. Linq 学习——将List集合作为筛选条件查询数据
  3. Java的运行时数据存储机制
  4. 复习python的__call__ __str__ __repr__ __getattr__函数 整理
  5. A Bug&#39;s Life POJ - 2492 (种类或带权并查集)
  6. E. Max Gcd
  7. mybatis配置的逻辑删除不好使了
  8. Missing artifact net.sf.json-lib:json-lib:jar:2.2.3
  9. lua学习之逻辑运算符not,and,or
  10. 前端以BASE64码的形式上传图片