您的位置:首页 > 其它

OGRE 去掉设置窗口

2011-08-20 19:38 225 查看
OGRE 的设置窗口比较烦人,每次运行示例都要先弹出这个窗口,从开始学习 OGRE 的第一天起我就想除掉它,另有一个原因是只要解决了这个设置窗口的问题,就可以完全抛开 ExampleApplication.h 和 ExampleFrameListener.h ,建立起完全适合自己的应用程序框架。

但是对于初学者来说这是一个不大不小的拦路虎,主要是因为对公用头文件 ExampleApplication.h 中 ExampleAppApplication 类的 configure() 方法的跟踪,如果不仔细往往没有结果。但是问题的最后解决非常简单,只需要使用下面的代码替换掉 ExampleApplication.h 中的对应代码:

virtual bool configure(void)

{

if( mRoot->restoreConfig() ) // 从配置文件 ogre.cfg 中读取并设置显示模式

{

mWindow = mRoot->initialise( true ); // 初始化根节点(根节点,不是根场景节点)

return true;

}

else

{

return false;

}

}

这样,程序在打开之后,并不弹出设置窗口,它直接从 *.exe 程序所在的目录下读取配置文件 ogre.cfg ,读取其中的显示设定并作相应的设置。

Root:: restoreConfig() (恢复设置) 是一个现成的方法,在头文件 OgreRoot.h 中定义,我们可以观察一下它的代码:

//-----------------------------------------------------------------------

bool Root::restoreConfig(void)

{

// Restores configuration from saved state

// Returns true if a valid saved configuration is

// available, and false if no saved config is

// stored, or if there has been a problem

ConfigFile cfg;

String renderSystem;

RenderSystemList::iterator pRend;

try {

// Don''t trim whitespace

cfg.load(mConfigFileName, "\t:=", false); // 读取配置文件

}

catch (Exception& e)

{

if (e.getNumber() == Exception::ERR_FILE_NOT_FOUND)

{

return false;

}

else

{

throw;

}

}

renderSystem = cfg.getSetting("Render System"); // 从配置文件中读取渲染系统设置

if(renderSystem.empty())

{

// No render system entry - error

return false;

}

pRend = getAvailableRenderers()->begin(); // 获取可用渲染系统列表

while (pRend != getAvailableRenderers()->end())

{

String rName = (*pRend)->getName();

if (rName == renderSystem) // 选中名字匹配的渲染系统

break;

pRend++;

}

if (pRend == getAvailableRenderers()->end())

{

// Unrecognised render system

return false;

}

setRenderSystem(*pRend); // 设置渲染系统

ConfigFile::SettingsIterator i = cfg.getSettingsIterator(); // 从配置文件中获取渲染系统高级选项

String optName, optVal;

while (i.hasMoreElements())

{

optName = i.peekNextKey();

optVal = i.getNext();

if(optName != "Render System")

{

mActiveRenderer->setConfigOption(optName, optVal); // 设置高级渲染选项

}

}

// Successful load

return true;

}

如果使用 restoreConfig() 直接读取配置文件,需要确认 ogre.cfg 已经存在并已经妥善配置,这个文件是以前我们运行 OGRE 示例的时候自动生成的,如果没有这个文件,你需要运行一次其它带配置窗口的示例来生成这个 ogre.cfg 。

在去掉对话框之后你需要自己修改这个配置文件来修改显示设置。

ogre.cfg 的生成是通过方法 void Ogre::Root:: saveConfig ( void ) ,在头文件 OgreRoot.h 中定义。

了解 restoreConfig() 和 saveConfig() 的工作机制,有助于我们以后制作自己的配置窗口。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: