1. 头文件 "Ogre.h", "ExampleApplication.h", "ExampleLoadingBar.h"
2. 覆盖基类的loadResource方法, 基类的该方法指示初始化所有资源组, 而这里带有加载工具条的显示
在加载过程中需要停止其他所有的渲染队列, 只允许Overlay的渲染, 这里需要用上SpecialCaseRenderQueue
用setSpecialCaseRenderQueueMode实现只渲染特殊的队列, 用法如下。
由于本例需要世界地图所以要链接地图, 加载地图
linkWorldGeometryToResourceGroup和loadResourceGroup该地图资源组
// 开始
mLoadingBar.start(mWindow, 1, 1, 0.75);
// 关闭所有的渲染, 除了Overlay
mSceneMgr->clearSpecialCaseRenderQueues();
mSceneMgr->addSpecialCaseRenderQueue(RENDER_QUEUE_OVERLAY);
mSceneMgr->setSpecialCaseRenderQueueMode(SceneManager::SCRQM_INCLUDE);
// 建立世界地图的链接
ResourceGroupManager::getSingleton().linkWorldGeometryToResourceGroup(
ResourceGroupManager::getSingleton().getWorldResourceGroupName(),
mQuakeLevel, mSceneMgr);
// 初始化剩余的资源组
ResourceGroupManager::getSingleton().initialiseAllResourceGroups();
ResourceGroupManager::getSingleton().loadResourceGroup(
ResourceGroupManager::getSingleton().getWorldResourceGroupName(),
false, true);
// 重新渲染
mSceneMgr->clearSpecialCaseRenderQueues();
mSceneMgr->setSpecialCaseRenderQueueMode(SceneManager::SCRQM_EXCLUDE);
mLoadingBar.finish();
3. 重载基类的setupResources()方法
ConfigFile类的getSetting方法可以得到特定的值
ResourceGroupManager::getSingleton().getWorldResourceGroupName()则表示使用缺省的地图资源组
ConfigFile cf;
cf.load("quake3settings.cfg");
mQuakePk3 = cf.getSetting("Pak0Location");
mQuakeLevel = cf.getSetting("Map");
ExampleApplication::setupResources();
ResourceGroupManager::getSingleton().addResourceLocation(
mQuakePk3, "Zip", ResourceGroupManager::getSingleton().getWorldResourceGroupName(), true);
4. 重载基类的chooseSceneManager方法, 注意BSP地图不支持 ST_GENERIC类型 地图管理器
mSceneMgr = mRoot->createSceneManager("BspSceneManager");
void createScene(void)
{
// modify camera for close work
mCamera->setNearClipDistance(4);
mCamera->setFarClipDistance(4000);
// Also change position, and set Quake-type orientation
// Get random player start point
ViewPoint vp = mSceneMgr->getSuggestedViewpoint(true);
mCamera->setPosition(vp.position);
mCamera->pitch(Degree(90)); // Quake uses X/Y horizon, Z up
mCamera->rotate(vp.orientation);
// Don't yaw along variable axis, causes leaning
mCamera->setFixedYawAxis(true, Vector3::UNIT_Z);
}