场景管理器不是单例,您想创建多少就创建多少。
创建方法
1、new SceneManager()
2、Root的createSceneManager方法
一般都使用方法2
为什么使用createSceneManager函数?
原因是Ogre的插件系统,比如你使用了OctreeSceneManager插件的话,OctreeSceneManager会将自身注册为ST_GENERIC类型,并且覆盖作为基础的SceneManager类。OctreeSceneManager使用了拣选不可见对象的系统,因此它比标准的SceneManager要快,如果你从plugins.cfg文件中去除了OctreeSceneManager插件,那么当你请求ST_GENERIC类型时,你才可能会使用基础的SceneManager,而方法1只能创建基础的SceneManager。
也许会根据你的插件设置使用更好的场景管理器,这就是Ogre系统的优美所在。
创建场景管理器时可以指定名字,通过给场景管理器命名,我们就不再需要再保留指针来跟踪它们。
mSceneMgr = mRoot->createSceneManager("FooSceneManager", "foo");
SceneManager *foo = mRoot->getSceneManager("foo");
//foo指向mSceneMgr