OSG学习笔记5—使用开关节点
来源:互联网 发布:配电网数据采集与监控 编辑:程序博客网 时间:2024/04/30 08:30
// osg_4_23.cpp : 定义控制台应用程序的入口点。
//使用开关节点
//开关节点的用法,以及使用开关节点的更新回调完成了动态的子节点切换过程。
//一共切换两次,一次在120帧时,一次在240帧时
//关于节点的实现:判断某个子节点对于的开关值,当开关值为false时,不执行其accept()函数,因此该子节点及其子树也不会被访问器遍历到。
//否则执行正常的访问器推进操作
//使用开关节点
//开关节点的用法,以及使用开关节点的更新回调完成了动态的子节点切换过程。
//一共切换两次,一次在120帧时,一次在240帧时
//关于节点的实现:判断某个子节点对于的开关值,当开关值为false时,不执行其accept()函数,因此该子节点及其子树也不会被访问器遍历到。
//否则执行正常的访问器推进操作
#include "stdafx.h"#include<osg/Switch>#include<osgDB/ReadFile>#include<osgViewer/Viewer>class CessnaCallback :public osg::NodeCallback//定义了节点更新回调,每一帧系统遍历到当前节点时都会被自动调用{public:static const int _fireStartFrame = 120;//预先设定第一次切换值为120帧static const int _fireStartFrame1 = 240;//预先设定第二次切换值为240帧virtual void operator()(osg::Node* node,osg::NodeVisitor* nv)//自定义节点操作{osg::Switch* cessnaSwitch = dynamic_cast<osg::Switch*>(node);if (cessnaSwitch && nv){const osg::FrameStamp* frameStamp = nv->getFrameStamp();//获得节点的当前运行帧数if (frameStamp){if (_fireStartFrame < frameStamp->getFrameNumber())//当当前帧大于120时,使用setValue()执行子节点的切换。{cessnaSwitch->setValue(0, false);cessnaSwitch->setValue(1, true);}if (_fireStartFrame1 < frameStamp->getFrameNumber())//当当前帧大于240时,使用setValue()执行子节点的切换。{cessnaSwitch->setValue(0, true);cessnaSwitch->setValue(1,false);}}}traverse(node, nv);}};int _tmain(int argc, _TCHAR* argv[]){osg::ref_ptr<osg::Switch> root = new osg::Switch;root->addChild(osgDB::readNodeFile("cessna.osg"), true);//添加模型到子节点,并设置为当前要遍历到的节点,为trueroot->addChild(osgDB::readNodeFile("cessnafire.osg"), false);root->setUpdateCallback(new CessnaCallback);osgViewer::Viewer viewer;viewer.setSceneData(root.get());return viewer.run();}
0 0
- OSG学习笔记5—使用开关节点
- OSG学习笔记4—使用空间变换节点
- OSG学习笔记2—节点属性访问器
- OSG 场景节点添加,删除,隐藏 ,开关
- osg入门系列3 - 开关节点例子
- OSG 场景节点添加,删除,隐藏 ,开关
- OSG学习笔记6—鸟瞰图相机
- OSG学习笔记
- OSG学习笔记18
- OSG学习笔记01:OSG的安装
- OSG学习笔记1:OSG环境编译
- OSG学习笔记(二)之OSG静态库的使用
- OSG学习笔记3-使用回调实现旋转动画
- OSG学习:位置变换节点示例
- OSG学习:矩阵变换节点示例
- OSG学习:自动对齐节点示例
- OSG::节点
- osg开关门
- PART 2: 使 Shell 能读取命令
- Shiro整合SSH开发4:Realm授权,perms过滤器测试和使用方法讲述
- Android Volley详细解析(一):Volley基本用法
- swift 网络请求&json解析
- 修改Ubuntu中locale转中文为英文
- OSG学习笔记5—使用开关节点
- Mac电脑快捷键
- Ubuntu 16.04安装和配置Sublime Text 3
- Memcache工作原理
- 8项目1
- iOS 动画-时钟
- 8项目1+
- hadoop学习序曲之java基础篇--java常用类
- maridb 10.0 在线ddl修改字段测试