场景的管理 :SceneManagerEnumerator

如果说root是需要关注的第一个类,那么Scene必须是我们紧接着需要关注的模块,这个模块把各种资源有机的组合到一起。如果说root的主要作用是初始化,那么Scene就是对整个场景的组织和渲染,当然它不会涉及到具体的操作,但是它会调用一些具体的操作。

 

SceneManagerEnumerator:

Scene模块的入口,这个类的出现并不以外,因为场景的管理有好多种方案,以外的是它不直接创建SceneManager,SceneManager尽然还有SceneManagerFactory。话说ogre里面的Manager不是都是单例的么?SceneManagerEnumerator的职责与root类似,只不过它创建的是Scene模块的对象,这里只贴出它的字段来:

    public:
		/// Scene manager instances, indexed by instance name
		typedef map<String, SceneManager*>::type Instances;
		/// List of available scene manager types as meta data
		typedef vector<const SceneManagerMetaData*>::type MetaDataList;
    private:
		/// Scene manager factories
		typedef list<SceneManagerFactory*>::type Factories;
		Factories mFactories;
		Instances mInstances;
		/// Stored separately to allow iteration
		MetaDataList mMetaDataList;
		/// Factory for default scene manager
		DefaultSceneManagerFactory mDefaultFactory;
		/// Count of creations for auto-naming
		unsigned long mInstanceCreateCount;
		/// Currently assigned render system
		RenderSystem* mCurrentRenderSystem;

 落到实处咱关心的也就三个东西,SceneManager,SceneManagerMetaData和 RenderSystem。

 

SceneManagerMetaData :MetaData其实是一种数据模型的概念,它的意义就是让数据模块化,这样用起来就不会到处乱放。这里是每一种SceneManager对应一个SceneManagerMetaData对象,这也是合理的。

	struct SceneManagerMetaData
	{
		/// A globally unique string identifying the scene manager type
		String typeName;
		/// A text description of the scene manager
		String description;
		/// A mask describing which sorts of scenes this manager can handle
		SceneTypeMask sceneTypeMask;
		/// Flag indicating whether world geometry is supported
		bool worldGeometrySupported;
	};

 看到了吧,以typeName来寻找对应的 SceneManagerMetaData,所有的SceneManagerMetaData都在SceneManagerEnumerator里面存储。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值