Ogre 1.8 SceneManager

终于到了麻烦的场景管理了。
OgreSceneManager.h
最重要的类SceneManager,主要功能就是管理一个场景,也就是Scene(由一群SceneNode组成),当然还可以同时管理静态图形(例如地形,不过是不同的机制)。这个只是基类,特定的SceneManager需要继承这个类添加实现,比较出名的场景管理图有八叉树和二叉树,在plugins目录下能找到。不过这里就主要介绍基类接口。
首先是普通成员:
名字总得起个吧?mName:String
得有Camera吧?可能不只一个吧?mCameras:CameraList
当先只能显示一个Camera(Ogre貌似不支持三国无双类似的双Camera),mCameraInProcess:Camera*

静态图形和地图:
得有静态几何图形吧?可能不只一个吧?mStaticGeometryList:StaticGeometryList
mInstancedGeometryList:InstancedGeometryList
mInstanceManagerMap:InstanceManagerMap
mWorldGeometryRenderQueue:uint8

节点:
场景图就是由节点组成的,肯定得有个节点指针列表mSceneNodes:SceneNodeList(不过由根节点就可以向下找到所有节点,所以这个节点列表的主要功能是内存管理方便)
一棵节点树得知道哪里是根节点,也只需要知道这个:mSceneRoot:SceneNode
Ogre的SceneNode有个特殊功能就是自动跟踪另外一个SceneNode,跟踪方式是自动调整自己的-Z坐标让它指向被跟踪的SceneNode。设置了这个功能的ScnenNode就邀杯单独保存在这个列表了。mAutoTrackingSceneNodes:AutoTrackingSceneNodes

渲染:
得把所有的该显示的物体渲染出来吧?mRenderWueue:RenderQueue(这个东西能把场景里所有要渲染的东西排个顺序送到渲染引擎去渲染显示)
有人送了,得有人接吧?渲染引擎的指针:mDestRenderSystem:RenderSystem

颜色:
得有环境光色吧?mAmbientLight:ColourValue

天空:
场景中总得有天空吧?不过天空种类不少,为了支持所有种类,把所有可能都包含进来了,所以属性会有点多,用到啥天空用什么属性。
天空板(我也不知道叫的对不对,就是一个平面代表的天空SkyPlane):
天空板实体:mSkyPlaneEntity:Entity*;
天空板节点:mSkyPlaneNode:SceneNode;
天空板使能:mSkyPlaneEnabled:bool;
天空板的渲染队列(就是前面说的RenderQueue):mSkyPlaneRenderQueue:uint8
天空板(这个是真正存放天空板的3D信息的东西,Entity只是在场景图中的封装代表):mSkyPlane:Plane
天空板参数:mSkyPlaneGenParameters:SkyPlaneGenParameters 
天空顶(SkyDoom)
天空顶实体(5个面,没有下):mSkyDomeEntity[5]:Entity* 
天空顶节点:mSkyDomeNode:SceneNode*
天空顶使能:bool mSkyDomeEnabled;
天空顶的渲染队列:mSkyDomeRenderQueue:uint8
天空顶的方向:mSkyDomeOrientation:Quaternion
天空顶参数: mSkyDomeGenParameters:SkyDomeGenParameters
天空盒(SkyBox)
天空盒实体:mSkyBoxObj:ManualObject*(有6个面)
天空盒节点:mSkyBoxNode:SceneNode* 
天空盒使能:mSkyBoxEnabled;:bool 
天空盒渲染队列:mSkyBoxRenderQueue:uint8
天空盒方向:mSkyBoxOrientation:Quaternion
天空盒参数:SkyBoxGenParameters mSkyBoxGenParameters;

雾:
场景里可能会有雾气存在吧?管它有没有,数据支持得有啊。
雾模式:mFogMode:FogMode
雾颜色:mFogColour:ColourValue
雾密度:mFogDensity:Real
雾起点:mFogStart:Real
雾终点:mFogEnd:Real


另外,还有对light、shadow的支持数据
SceneManager里还保存了全局的所有动画列表:mAnimationsList:AnimationList; mAnimationStateSet:AnimationStateSet
当然,还有一大堆的listener,用来对各种动作进行监听
还有一大堆的图像参数给Gpu程序的。
还有实现了Visitor设计模式的接口
还有对LOD的支持数据

最后是状态成员:

所有节点的包围盒是否要显示:mShowBoundingBoxes:bool


这里仅仅是SceneManager的比较通用的数据,具体的SceneManager的实现还有一些数据,但是不多了。





你可能感兴趣的:(设计模式,String,plugins,图形,引擎)