osgcallback
来源:互联网 发布:淘宝5年老店标志没了 编辑:程序博客网 时间:2024/04/27 20:05
该示例程序主要展示了osg回调的用法,osg提供的回调功能主要使节点能够完成用户临时定义的功能,这些功能由回调函数完成,在每帧更新时(不同回调类型执行回调函数的时机不一样)执行回调函数完成用户定义的功能。
能执行回调函数的对象包括:节点、叶结点、相机、几何体(Drawable),osg提供的回调类型包括:
更新回调(UpdateCallback)每帧遍历时执行,自动执行回调函数。
事件回调(EventCallback):由事件触发回调函数的执行。
拣选回调(CullCallback):在拣选遍历时执行回调函数。
绘制回调(DrawCallback):几何体(Drawable)对象绘制时,执行回调函数,只能(Drawable)对象使用。
在示例程序中分别演示了这些回调类型的用法,执行回调首先要从osg::NodeCallback派生子类,在派生类中重载operator()方法,在该方法中加入自己定义的功能,然后让派生的类和相关的对象关联,执行回调。
示例程序主要使用InsertCallbacksVisitor类对根节点进行遍历,对于遍历到的节点执行相应的回调,示例代码如下:
class InsertCallbacksVisitor : public osg::NodeVisitor
{
public:
InsertCallbacksVisitor():osg::NodeVisitor(osg::NodeVisitor::TRAVERSE_ALL_CHILDREN)
{
}
//当遍历到节点时,执行更新和拣选回调
virtual void apply(osg::Node& node)
{
node.setUpdateCallback(new UpdateCallback());
node.setCullCallback(new CullCallback());
traverse(node);
}
//遍历到叶结点时,执行更新回调,对于叶结点执行拣选回调是无意义的。
virtual void apply(osg::Geode& geode)
{
//执行更新回调
geode.setUpdateCallback(new UpdateCallback());
//得到叶结点包含的几何体,对每个几何体执行更新、拣选、绘制回调
for(unsigned int i=0;i<geode.getNumDrawables();++i)
{
geode.getDrawable(i)->setUpdateCallback(new DrawableUpdateCallback());
geode.getDrawable(i)->setCullCallback(new DrawableCullCallback());
geode.getDrawable(i)->setDrawCallback(new DrawableDrawCallback());
}
}
virtual void apply(osg::Transform& node)
{
apply((osg::Node&)node);
}
};
对于每种回调类的定义,在此不再重复,请参看相关的代码。
- osgcallback
- osgcallback例子
- osgCallback的实现方法
- osgcallback程序注解及CallBack回调的介绍(转)
- 【线段树】 HDOJ 4942 Game on S♂play
- Java中遇到的超级愚蠢的错误
- linux网络编程——初探TCP
- C语言中 %与fmod()在计算余数时的区别与联系
- Android 获取root权限
- osgcallback
- Windows Live Writer博客发布工具测试在本地发布博客文章到csdn
- mac——myeclipse安装(离线)
- hdu 1233(贪心算法,克鲁斯卡尔算法,并查集)
- 在设计软体时,如何适当的喂狗,即如何精确判定软体的运行时间?
- 函数式编程初探
- 面向对象 php
- 大话设计の创建型模式
- 新浪微博数据采集界面