使用CEGUI读取Torchlight(火炬之光)的UI资源
最近在接触CEGUI, 找了一些资源, 发现Torchlight(火炬之光)的UI资源是开放的, 所以尝试用CEGUI读取其UI. CEGUI的编辑器包括CELayoutEditor和CEImagesetEditor, 我使用的是最新0.7.1版本的. 总体来说过程还是比较顺利的, 主要是有几点要注意:
1. 用编译好的CELayoutEditor去直接读取Torchlight里的UI时会报找不到一些资源文件的错, 这是由于Torchlight的scheme, layout, imageset的FileName属性里使用了相对位置, 而编辑器默认没有做这方面的处理, 所以要在EditorFrame::LoadData()里针对这种情况做一下处理.
2. CEImagesetEditor也有同样的问题, 在载入imageset时, 对应的image会提示找不到,这也是文件路径的处理问题, 需要对EditorDocument::setImageFilename作一些修改.
3. 在scheme 文件中, 旧版本的CEGUI中是这样写: <WindowSet Filename='CEGUIFalagardWRBase' />
而在0.7.1中应该这样写:<WindowRendererSet Filename='CEGUIFalagardWRBase' />. 不然会报一个这样的错: (这是我在http://blog.sina.com.cn/u/1749132077 找到的解决办法)
CEGUI::InvalidRequestException in filef:\@working\cegui-0.7.1\cegui-0.7.1\cegui\src\ceguifactorymodule.cpp(116): FactoryModule::registerAllFactories - Required function export'uint registerAllFactories(void)' was not found in module'CEGUIFalagardWRBase_d'.
4. LayoutEditor默认使用SILLY读取图片的, 但是它不支持dds文件的读取, 所以就要在EditorFrame::InitializeCEGUI()中, 改用FreeImage或者DevIL, 它们都支持dds.同样ImagesetEditor也要修改, 它是在EditorGLCanvas::initialiseCEGUI()处理.
以下是程序截图: