CEGUI入门
一、资源初始化
不管你用的是什么引擎,至少要做如下所示最基础的三步,才能使CEGUI运行起来。
- 1. 创建 CEGUI::Renderer 对象。
- 2. 创建 CEGUI::System 对象。
- 3. 调用渲染函数。
在OSG源代码例子程序中有一个osgcegui.cpp文件,演示了如何将cegui与osg相结合,例子程序可以编译过,但是不做修改无法正常运行,因为在创建了renderer对象和system对象后,在派生的GUIDrawable对象加载资源前,还应该对CEGUI的资源进行初始化,初始化的方法可以参照CEGUi的例子程序中有个CEGuiBaseApplication类,它有两个成员方法,分别是(1)initialiseResourceGroupDirectories()和(2)initialiseDefaultResourceGroups(),(1)和(2)方法调用也是有顺序的,(1)在前,即先定位资源目录,然后再初始化资源的默认设置
//----------------------------------------------------------------------------//
void CEGuiBaseApplication::initialiseResourceGroupDirectories()
{
// initialise the required dirs for the DefaultResourceProvider
CEGUI::DefaultResourceProvider* rp =
static_cast<CEGUI::DefaultResourceProvider*>
(CEGUI::System::getSingleton().getResourceProvider());
const char* dataPathPrefix = getDataPathPrefix();
char resourcePath[PATH_MAX];
// for each resource type, set a resource group directory
sprintf(resourcePath, "%s/%s", dataPathPrefix, "schemes/");
rp->setResourceGroupDirectory("schemes", resourcePath);
sprintf(resourcePath, "%s/%s", dataPathPrefix, "imagesets/");
rp->setResourceGroupDirectory("imagesets", resourcePath);
sprintf(resourcePath, "%s/%s", dataPathPrefix, "fonts/");
rp->setResourceGroupDirectory("fonts", resourcePath);
sprintf(resourcePath, "%s/%s", dataPathPrefix, "layouts/");
rp->setResourceGroupDirectory("layouts", resourcePath);
sprintf(resourcePath, "%s/%s", dataPathPrefix, "looknfeel/");
rp->setResourceGroupDirectory("looknfeels", resourcePath);
sprintf(resourcePath, "%s/%s", dataPathPrefix, "lua_scripts/");
rp->setResourceGroupDirectory("lua_scripts", resourcePath);
sprintf(resourcePath, "%s/%s", dataPathPrefix, "xml_schemas/");
rp->setResourceGroupDirectory("schemas", resourcePath);
}
//----------------------------------------------------------------------------//
void CEGuiBaseApplication::initialiseDefaultResourceGroups()
{
// set the default resource groups to be used
CEGUI::Imageset::setDefaultResourceGroup("imagesets");
CEGUI::Font::setDefaultResourceGroup("fonts");
CEGUI::Scheme::setDefaultResourceGroup("schemes");
CEGUI::WidgetLookManager::setDefaultResourceGroup("looknfeels");
CEGUI::WindowManager::setDefaultResourceGroup("layouts");
CEGUI::ScriptModule::setDefaultResourceGroup("lua_scripts");
// setup default group for validation schemas
CEGUI::XMLParser* parser = CEGUI::System::getSingleton().getXMLParser();
if (parser->isPropertyPresent("SchemaDefaultResourceGroup"))
parser->setProperty("SchemaDefaultResourceGroup", "schemas");
}
进行了这两步的初始化之后,CEGUIDrawable对象才能使用loadschema()、loadfont()等方法,否则运行出错