OSG 场景的组织结构
来源:互联网 发布:java 线程锁活锁 死锁 编辑:程序博客网 时间:2024/06/05 23:03
OSG 场景的组织结构
本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:
- 节点的定义与种类
- 节点的访问
- 重要节点的功能实现
节点的定义与种类
osg采用包围体层次来实现场景图的管理,这里的“包围体”指的是将一组物体完全封闭在一个简单空间形体中,从而提高各种检测的运算速度。常见的有包围球和包围盒,还记得上一章中的包围球的定义吗?
采用包围体层次的场景图通常采用梳妆结构来保存信息。一棵场景树,有一个根节点,多个枝节结点和多个叶子结点,每个节点都有自己的子树,该结点的包围体就包围了其本身及其子树,每个节点都有包围体,就构成了层层包围体。这样来说,包围体的层次就清晰分明,对场景对象进行一系列裁剪,相交测试和碰撞测试时就不会互相影响。
-场景节点的基类:Node类
-如果我们希望强制重新计算并获取包围球数据,编写如下代码
node->dirtyBound();//更新节点的包围体
osg::BoundingSphere& bs=node->getBound()//获取包围球数据,其中自动调用了一些计算类的函数,获得其中心位置和半径
-节点类的父子关系这里需要注意的是,多个父节点共享一个子节点的情形,我们把这种现象称之为“实例化”
-为了管理和设置父节点的列表,我们需要为Node类增加一系列的接口函数,以例子为说明,获取和操作结点的每一个父节点的方法如下:
for(遍历每个父节点)
{const osg::Group*parent=node.getParent(i);}
-叶节点Geode
假如现有多个可绘制体drawable1,drawable2,需要加入到一个叶结点中,那么所需编写的代码如下:
osg::ref_ptr<osg::Geode>geode=new osg::Geode;
geode->addDrawable(drawable1);
geode->addDrawable(drawable2);//从叶子结点geode中追加一个可绘制对象名为drawable2
…
osg::Drawable* drawable=geode->getDrawable(i);//从叶子结点geode中获取并操作索引位置为i的可绘制体
-组结点Group类
group->addChild(node);//向组结点中追加一个子节点
osg::Node*anoter_node2=group->gerChild(1);//获取索引位置为1的子节点
组结点的子节点可以是另一个组结点,也可以是一个或多个叶子结点
- OSG 场景的组织结构
- OSG 学习第一天:场景的组织及渲染
- 简单的场景组织
- nopCommerce的组织结构
- 技术部的组织结构
- 程序的组织结构
- Tomcat的组织结构
- Preference的组织结构
- 邮件的组织结构
- 3D游戏场景数据的组织
- OSG:场景管理
- OSG实现场景漫游
- osg场景中的树
- OSG场景漫游(一)
- OSG场景保存
- OSG场景保存
- B+树的组织结构
- sap组织结构的学习
- rails 数据验证(rails guides学习笔记)
- C语言循环的测试
- Eclipse中的一些调试小技巧
- 668. Kth Smallest Number in Multiplication Table
- CentOS修改ulimit(最大进程数和最大文件打开数)
- OSG 场景的组织结构
- 树
- 古文觀止卷八_送杨少尹序_韓愈
- 单词查找树(数据结构)
- Linux常用命令大全
- DNN神经网络及前向传播算法概述
- C语言第六课
- 23读书笔记之通知的基本用法
- Scramble String