【3D技术宅公社】XR数字艺术论坛  XR技术讨论 XR互动电影 定格动画

 找回密码
 立即注册

QQ登录

只需一步,快速开始

调查问卷
论坛即将给大家带来全新的技术服务,面向三围图形学、游戏、动画的全新服务论坛升级为UTF8版本后,中文用户名和用户密码中有中文的都无法登陆,请发邮件到324007255(at)QQ.com联系手动修改密码

3D技术论坛将以计算机图形学为核心,面向教育 推出国内的三维教育引擎该项目在持续研发当中,感谢大家的关注。

查看: 4593|回复: 1

使用CEGUI渲染的初学者指南

[复制链接]
发表于 2007-11-12 17:56:50 | 显示全部楼层 |阅读模式
无论使用哪个引擎,使用CEGUI渲染GUI必须有三个步骤
  1. 创建一个CEGUI::Renderer基对象.
  2. 创建CEGUI::System对象.
  3. 调用相关方法渲染GUI

很明显在此之前必须装载一些基本的文件,这些将会在下面的装载数据文件和初始化中介绍到。另外你必须获得系统输入,这些将会在插入输入的初学者指南中介绍到
 


1 创建一个CEGUI::Renderer基对象.

必须include你使用渲染器的头文件。

基本的创建代码:

Direct3D 8.1

CEGUI:irectX81Renderer* myRenderer =
 new CEGUI:irectX81Renderer(myD3D8Device);

Direct3D 9

CEGUI:irectX9Renderer* myRenderer =
 new CEGUI:irectX9Renderer(myD3D9Device);

OpenGL

CEGUI::OpenGLRenderer* myRenderer =
 new CEGUI::OpenGLRenderer(0);

Ogre3D

CEGUI::OgreCEGUIRenderer* myRenderer =
 new CEGUI::OgreCEGUIRenderer(myRenderWindow);

Irrlicht Engine

CEGUI::IrrlichtRenderer* myRenderer =
 new CEGUI::IrrlichtRenderer(myIrrlichtDevice, true);

 

2 创建CEGUI::System对象.

传递一个刚才创建的渲染器指针
new CEGUI::System(myRenderer);

 

3 调用相关方法渲染GUI

这个是唯一和你的渲染器相关的步骤,因此要根据情况分开调用。你必须在渲染循环的最后调用CEGUI::System::renderGUI。Ogre3D引擎的用户不需要做这个。例子如下

Direct3D 8.1 / 9

// Start the scene
myD3DDevice->BeginScene();
// clear display
myD3DDevice->Clear(0, 0, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0, 0, 0), 1.0f, 0);
// user function to draw 3D scene
draw3DScene();
// draw GUI
CEGUI::System::getSingleton().renderGUI();
// end the scene
myD3DDevice->EndScene();
// finally present the frame.
myD3DDevice->resent(0, 0, 0, 0);

OpenGL

// user function to draw 3D scene
draw3DScene();
// draw GUI (should not be between glBegin/glEnd pair)
CEGUI::System::getSingleton().renderGUI();

Irrlicht

// start the scene
myIrrlichtDriver->beginScene(true, true, irr::video::SColor(150,50,50,50));
// draw main scene
myIrrlichtSceneManager->drawAll();
// draw gui
CEGUI::System::getSingleton().renderGUI();
// end the scene
myIrrlichtDriver->endScene();


4 结论
这是CEGUI最基础的教程。一些话题没有在这里介绍,例如在OGER3D中使用不同的场景管理器;以及一些高级话题,例如用户选择资源提供者,等等


 

 楼主| 发表于 2007-11-12 17:57:57 | 显示全部楼层

装载数据文件和初始化的初学者指南

From CEGUIWiki


1 概览:数据文件和ResourceProvider
1.1 资源的提供 – 什么是ResourceProvider?
1.2 XML, XSD? 都是XML!
1.3 数据文件
1.3.1 图片集
1.3.2 字体
1.3.3 Scheme
1.3.4 布局
1.3.5 配置
2 装载基本文件
3 简单的默认初始化
4 结论
 


1 概览:数据文件和ResourceProvider

    CEGUI使用一些数据文件的变体,这可能会导致一些混淆的发生。因此首先介绍数据文件是什么,它们用来干什么,怎么在CEGUI中装载。


1.1 资源的提供 – 什么是ResourceProvider?

    CEGUI使用一个叫做ResourceProvider的帮助对象。这个对象提供一个CEGUI核心库和外部文件装载系统的接口。例如Ogre和Irrlicht引擎使用他们自己的资源管理器、文件装载子系统:通过实现和提供一个专门化的ResourceProvider对象,这些引擎的渲染器实现了以上系统的“无缝”整合,因此CEGUI数据文件是通过这些系统装载的。

    Direct3D和OpenGL默认情况下没有使用专门话的ResourceProvider,这些系统默认从应用程序的当前路径装载所有资源文件。因此这些文件必须和同一个文件夹相关,但是他们彼此毫无关系,这个很重要。


1.2 XML, XSD? 都是XML!

    除了图形文件和可装载模块文件(.dll/.so等等),所有CEGUI使用的数据文件都是XML。这儿出现了第一个障碍:如何使用schema(.xsd)文件。

    默认情况下,CEGUI使用Xerces-C++来处理带有schema验证的XML文件。(关于XSD文件的介绍略)。CEGUI有一些XSD在cegui_mk2/XMLRefSchema/ 目录下。必须记住的是xsd文件是ResourceProvider系统所必须的,你可以在要装载的xml文件目录下放置一个合适的.xsd文件。


1.3 数据文件

    数据文件常常不是以.xml结尾的,尽管它们都是xml文件。它们通常根据文件内容定义,例如.imageset是Imageset的xml配置文件,.font是字体的xml配置文件,等等。下面是对每种数据文件的简要介绍。


1.3.1 图片集Imageset

    Imageset只是原图形/纹理文件某个区域的定义(Imageset定义时将会指定区域)。每个定义的区域都有一个唯一的名字,并且在系统内被认为是一个Image。Image是Imageset中一个基本的元素。如果想要更改CEGUI画出的图形,可以更改原图形/纹理文件,或者更改image的定义区域。


1.3.2 字体

    可以定义两种类型的字体供CEGUI使用动态字体    基于true-type(.ttf)的字体文件静态字体    一个位图字体,这种字体基于一个定义了Images的Imageset。


1.3.3 Scheme

    Schema是把零碎的数据文件组合起来的一种方法。 它也是装载和注册widget类型的最简便的方法。一个Schema可以包含以下一个或者多个类型的定义(这些文件描述的资源可以在schema被装载时装载)。

  • Imageset
  • Font
  • Window Set
  • Window Alias

    Imageset和font在前面已经提到过。一个Window Set指定了可装载模块(.dll/.so, 等等)的名字。
    Widgets集包含了你希望注册的模块集。(注,根据网上的资料,widgets类似于windows的themes)
    Window或者widget类型可以有多个名字,Windows Alias提供了这一机制。我们也可以通过这种机制使一个widget"隐藏"另一个已经注册了的widget。(有点象c++的隐藏?)


1.3.4 布局layout

    布局文件包含了一个窗口布局的信息,它也是xml格式的。其中每个'window'元素定义了被创建的window或者widet,'Property'元素定义每个window的属性值。


1.3.5 配置

    CEGUI支持配置文件。可以通过这个文件设定一些默认值,例如使用哪个Scheme,哪个布局,哪个脚本文件(在使用SriptMoudle时)等等


2 装载基本文件

    要跑起一个CEGUI的示例,至少必须有以下文件。

  • Imageset
  • Font
  • Scheme

    Scheme文件的好处在于它可以用来自动装载其他两个数据文件。在CEGUI的样例schemes中只有Imageset而没有Font。下面我们来装载一个scheme文件和font文件。如下:

// load in the scheme file, which auto-loads the TaharezLook imageset
CEGUI::SchemeManager::getSingleton().loadScheme(“../datafiles/schemes/TaharezLook.scheme”);
// load in a font.  The first font loaded automatically becomes the default font.
CEGUI::FontManager::getSingleton().createFont(“../datafiles/fonts/Commonwealth-10.font”);

    在上面的代码中,我们假设'datafiles'目录存在,并且位于当前目录的上层目录中,其中包含了cegui_mk2/Samples/datafiles中的所有文件。

    Oger用户注意:要使用没有被编辑过的样例数据文件,你必须确保当前工作目录被oger资源管理器中设定为资源路径(可以通过resources.cfg设定)。或者你可以添加所有数据文件子目录并且删去数据文件中的所有相对路径信息。这样做是因为它们必须在默认的ResourceProvider下和D3D/OpenGL一起工作,就像前面讨论的那样。


3 简单的默认初始化

    最后,你需要设定一些默认值。这保证了在window或者widget中没有指定特定的主题时系统总是可以有一个可用的字体和鼠标图标。

    在现实中,我们没有必要指定一个默认字体,因为FontManager总是会自动设置第一个装载的字体为默认的。但如果这不是你要的默认字体,你可以再设定一个你想要的默认字体。设置默认字体的代码如下:

System::getSingleton().setDefaultFont(“Commonwealth-10”);

    另一个需要设置的默认对象就是鼠标图标了。在你没有定义当鼠标移到某个元素上的图标时,鼠标不会消失。设定默认鼠标图标的代码如下:(使用上面和scheme一起装载的TaharezLook imageset)

System::getSingleton().setDefaultMouseCursor(“TaharezLook”, “MouseArrow”);


4 结论

    我们学习了一些基本数据文件,它们怎么装载,CEGUI的需要的最小初始化数据文件等等。其他文章会讨论每种数据文件的细节。

 

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|3D数字艺术论坛 ( 沪ICP备14023054号 )

GMT+8, 2025-5-6 15:19

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表