OSG程序设计之osg::NodeVisitor
2024-08-28 04:57:43
本文所有内容来自《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,吼吼
最新文章
- ASP.NET WebApi 文档Swagger中度优化
- JS 中 Array.slice() 和 Array.splice()方法
- 查看 Apache并发请求数及其TCP连接状态
- emacs 新手笔记(四) —— 使用 dired 完成一些简单的文件和目录操作
- 1-5Tomcat 目录结构 和 web项目目录结构
- dubbo Linux 解决:nc: command not found
- python os.walk()和os.path.walk()
- MySQL join buffer使用
- BZOJ3190[JLOI2013]赛车
- ACM、OI等比赛中的程序对拍问题
- C#控件TabControl隐藏page
- 类似QtiPlot的veusz,sigmaplot,pymol
- Cookie与Passport安全
- 【Windows 10 应用开发】如何防止应用程序被截屏
- class 选择器
- 项目Alpha冲刺Day3
- VS2010+OpenCV3.4.1+zbar 64位
- Powerdesigner数据库建模的浅谈
- Windows下使用创建多层文件夹 SHCreateDirectoryEx 函数需要注意的问题
- e807. 设置进程监听对话框的延迟弹出
热门文章
- matplotlib locators
- Linq 学习——将List集合作为筛选条件查询数据
- Java的运行时数据存储机制
- 复习python的__call__ __str__ __repr__ __getattr__函数 整理
- A Bug&#39;s Life POJ - 2492 (种类或带权并查集)
- E. Max Gcd
- mybatis配置的逻辑删除不好使了
- Missing artifact net.sf.json-lib:json-lib:jar:2.2.3
- lua学习之逻辑运算符not,and,or
- 前端以BASE64码的形式上传图片