Ogre学习笔记(6):BspSceneManager

1. 概览】

       Ogre支持Quake3bsp格式。相关的代码在“Plugin_BSPSceneManager”工程中。主要的类有以下几个:

 

Class BspSceneNode

       BspSceneNodeSceneNode的派生类,是专门提供给BSPSceneManager使用的。主要是提供针对于BSP tree的可见性判断。这个类并不是BSP treenodeBSP tree中的node使用BspNodeBspSceneNode会放入BSP treeleaf节点中。由于SceneNode使用包裹盒的方法,不可分割,所以一个BspSceneNode可能放入多个Bsp treeleaf节点中。

       从类的定义看,BspSceneNode并没有额外的保存什么数据。重写的几个虚函数主要是用来通知BspSceneMapagerBspSceneNode::_update()会调用BspSceneManager::_notifyObjectMoved()detach objcect会调用BspSceneManager::_notifyObjectDetached()

 

Class BspSceneManager

       粗略的看BspSceneManagerOctreeSceneManager类似。首先保存了一个BspLevel的指针,然后使用一个walkTree()函数,用来遍历tree结构。由于Quake使用BSP leaf tree,所以多了一个processVisibleLeaf()函数。另外一个明显的不同是有一个renderStaticGeometry()函数,“Renders the static level geometry tagged in walkTree”。此函数渲染“mMatFaceGroupMap”中的所有数据。BSP一个好处是不透明面可以front-back的顺序来渲染,而透明面back-front来渲染,OGRE是如何将此特性保存到MaterialFaceGroupMap的呢?

 

Class BspLevel

       这是一个核心的class。他存储了BSP的所有数据,关键的数据有:

1.         BspNode* mRootNode;”――BSP tree的根节点

2.         VertexData* mVertexData;”――整个level的所有顶点;

3.         StaticFaceGroup* mFaceGroups;”――faces

4.         BspNode::Brush *mBrushes;”――用来做碰撞检测的Brush,是QuakeBSP除了渲染以外的另外一个精华!Brush的名字有点怪,其实就是一个convex volume,可以减少CD的运算量。

5.

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值