OSG与CEGUI结合

来源:互联网 发布:深圳警察知乎 编辑:程序博客网 时间:2024/05/29 17:13

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()等方法,否则运行出错

原创粉丝点击