转载:OGRE一起学(十一) 去掉烦人的设置窗口

第十一章 去掉烦人的设置窗口

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() 的工作机制,有助于我们以后制作自己的配置窗口。

posted @ 2009-06-08 13:20  回忆1919  阅读(728)  评论(0编辑  收藏  举报