从OGRE纹理到CEGUI纹理 —— 使用RTT实现3D角色预览

 最近重拾LUA,觉得这个语言太美了。怎一个“简单”了得。不过我现在还太探索它和CEGUI的配合使用问题。虽然LUA的语法半年前就基本掌握了(那是因为LUA最简单的就是语法了~~XD),可现在还得琢磨如何让它和CEGUI及我的程序进行数据共享。好让我的LUA脚本里的回调函数可以直接操作APP里的数据(不知道这样做安全性如何?不过,若不这样,LUA的功能就不能扩大,只停留在非交互模式)。


刚开始玩OGRE的时候,就觉得在一个窗口里预览3D角色很有趣。到了现在才开始做,因为游戏牵涉的方面太广了(如果我还在坚持OGL,估计现在还在苦苦挣扎中,多亏了这只可爱的“食人魔”~~)。好了,闲话少说,进入正题。


其实,搞定这个很简单。首先,使用分场景管理器(当然,你也可以选择到一处人迹罕至的地方,架个摄像机来取景~或许这样效率更高,可我觉得这样不彻底,如果全天空都在使用某种特效,该如何处理,麻烦~)。然后,就是RTT(渲染到纹理)了。OGRE来实现RTT很方便,直接手动一个Texture,获取buffer里面的RenderTarget,用你选好的Camera给他加个Viewport,就OK了。


简单实现代码如下:


然后,就是把OGRE的纹理转到CEGUI上去。思路是这样的,OGRE与CEGUI的桥梁是CEGUIOgreRenderer(CEGUI提供,此处不考虑OgreGUIRenderer)。通过OgreRenderer,可以创建一个CEGUI里的纹理,参数就是一个OGRE中的纹理。这太简单了吧。


下面就可以通过这个CEGUI里的纹理来创建我们的Imageset了,同理,你可以很轻松的通过ImagesetManager提供的create方法来完成这项任务。参数有两个,一个名称,一个CEGUI纹理。这样一来,我们就可以在这个Imageset中定义图像了,使用Imageset的defineImage方法。参数吗,自己去找API帮助~~^_^。


终于到了最后阶段,给你的Window设置Image属性。。。(略过,看下面代码~~)



OK,去编译&运行吧。。。保证你能看到效果,可是。。效果并不是你所想的那样。。

因为你忘记了更新你的Window,所以,在程序中除非你改变了窗口尺寸或什么的,纹理图片才会改变~~


怎么办?好办,每帧都强制更新一个~~

找到你的FrameListener的frameRenderingQueued,在函数返回之前,添加下面一句:

CEGUI::WindowManager::getSingleton().getWindow("Root/framewindow/staticimage")->invalidate();

(这是CEGUI0.7的,如果你还在用CEGUI0.6及其之前的版本,我建议你可以去更新一下了~~如果你非用0.6,好吧,用“requestRedraw”替换invalidate,如果我没记错的话:-D~~)


搞了这么久,看下效果吧,下面是截图。(前两个是单场景管理器,后面的是双场景管理器)

 

 

 

 

 

 

 


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
CEGUI(Crazy Eddie’s GUI http://www.cegui.org.uk)是一个自由免费的GUI库,基于LGPL协议,使用C++实现,完全面向对象设计。CEGUI开发者的目的是希望能够让游戏开发人员从繁琐的GUI实现细节中抽身出来,以便有更多的开发时间可以放在游戏性上。 CEGUI的渲染需要3D图形API的支持,如OpenGL或Direct3D。另外,使用更高级的图形库也是可以的,比如OGRE、Irrlicht和RenderWare等,关键需求可以简化为二点: 纹理(Texture)的支持直接写屏(RHW的顶点格式、正交投影、或者使用shader实现) 本书截止日时,CEGUI的最新版本是0.6.0(本书的讨论也是基于此版本),本书光盘提供了SDK和全部源码的下载。 除此之外,CEGUI还同步提供了官方界面编辑器LayoutEditor和ImageSet编辑器,以方便UI和图像集的制作。作为界面编辑器,它需要系统级界面以提供编辑器操作,0.3.0版是基于MFC实现的;而在0.4.0版本以后,改为基于wxWidgets(跨平台的本地UI框架,这里的UI指Window操作系统底层,如:Windows、Unix和Mac,详见http://www.wxwidgets.org)实现。 目前将CEGUI作为游戏界面库开发的游戏已经有好多种,国内的天龙八部,巨人等游戏就是很好的例子。 CEGUI的功能是非常强大的,而且使用也非常的灵活,可以和脚本配合。可以通过配置文件自定义窗口外观。通过布局文件实现窗口布局等等特性,使得游戏的界面开发更加方便。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值