近日很多朋友咨询Overlay中文显示问题,回答的多了想索性再写个文档算了,放在网上共享,于是就有了本篇。
在Ogre1.2.5版本中,通过与Ogre官方论坛的开发者讨论实现了Overlay的中文显示,当初的实现非常的怪异,具体的实现可以参见Ogre官方论坛。
随着Ogre的更新,现在Ogre已经发布了1.4.7,1.4系列版本有一个重要的改进,就是加入了UTFString,这为Ogre中文显示予以很大的帮助。为了便于演示,我直接使用Ogre自带的Overlay,也就是大家熟悉的DebugOverlay,测试工程我选择Demo_ParticleFX,选择其他的也没有关系。现在编译它,运行后得到下图:

图的最左下角显示的就是英文DebugOverlay,接下来我们的任务就是把它编程中文的,^_^。
Overlay中文化操作步骤如下
1. 打开OgreSDK\media\packs\ OgreCore.zip。
2. 打开C:\WINDOWS\Fonts,把simhei.ttf添加到OgreCore.zip,(什么,没有simhei.ttf这个文件,那就还其他的中文ttf字体吧)。
3. 打开OgreCore.zip中的Ogre.fontdef,里面有BlueHighway这个字体定义块,在他的下面添加我们的SimHei,code_points里面的一大堆数字看不明白没关系,随后文章会解释。
SimHei
{
type truetype
source simhei.ttf
size 16
resolution 96
code_points 33-166 24403-24403 21069-21069 24103-24103 36895-36895 29575-29575 24179-24179 22343-22343 26368-26368 39640-39640 20302-20302 19977-19977 35282-35282 24418-24418 25968-25968 37327-37327 25209-25209 27425-27425
}
4. 打开OgreCore.zip中的OgreDebugPanel.overlay,把BlueHighway全部替换成SimHei,我们要使用中文字体了,嘿嘿。
5. 修改完成后,确保所做的修改已经保存到OgreCore.zip。
6. 进入Ogre解决方案,打开文件ExampleFrameListener.h,把54-59行的代码替换如下:
static String currFps = "Current FPS: ";
static String avgFps = "Average FPS: ";
static String bestFps = "Best FPS: ";
static String worstFps = "Worst FPS: ";
static String tris = "Triangle Count: ";
static String batches = "Batch Count: ";
static DisplayString currFps = L"当前帧速率: ";
static DisplayString avgFps = L"平均帧速率: ";
static DisplayString bestFps = L"最高帧速率: ";
static DisplayString worstFps = L"最低帧速率: ";
static DisplayString tris = L"三角形数量: ";
static DisplayString batches = L"批次: ";
7. 最后重新编译工程,下面是我运行的截图,是不是已经显示中文了,^_^。

现在再来看看SimHei中的code_points是如何生成的,这个可以参考我上次写的这篇文章http://www.cnblogs.com/gogoplayer/archive/2008/05/09/1189795.html,至此,实现Overlay中文显示。
转载请注明出处:
作者:gogoplayer
E-mail : gogoplayer@163.com
QQ : 78939328
http://www.gogoplayer.com.cn
今天在做Ogre中文显示时,遇到了Ogre字体code_points生成问题,下面来看一下我使用的黑体定义。
SimHei
{
type truetype
source simhei.ttf
size 16
resolution 96
code_points 33-166 24403-24403 21069-21069 24103-24103 36895-36895 29575-29575 24179-24179 22343-22343 26368-26368 39640-39640 20302-20302 19977-19977 35282-35282 24418-24418 25968-25968 37327-37327 25209-25209 27425-27425
}
字体code_points就是你要使用的Unicode字符编码,例如‘当’这个字的编码用16进制表示是5F53,转换成10进制就是24403,在Ogre字体定义中使用的是10进制,根据Ogre字体定义文档的描述,这个‘当’字需要在文件中描述成这样24403-24403,你可以到http://www.chi2ko.com/tool/CJK.htm查看每个字符对应的编码。
为了自动生成Ogre字体code_points,网上转了一圈没有找到合适的软件,那就自己动手吧,软件界面如下:

软件中分隔线以上是单字符转换,对应上述网站的编码查找功能;分隔线以下是字符串转换,可以用他来生成Ogre字体需要的code_points格式。
点击这里下载,注:软件需要.Net2.0 Framework。
转载请注明出处:
作者:gogoplayer
E-mail : gogoplayer@163.com
QQ : 78939328
http://www.gogoplayer.com.cn/
Shawn Hargreaves Blog的blog对我很有帮助,翻译高手的文章,诚惶诚恐,一定做到认真仔细,保持原汁原味,基于外语和水平的限制,难免会有纰漏,到时还望各位指正。
Lsge ---2D引擎介绍
Lsge全称为Light Shadow Game Engine,和Ogre有点像,因为这个2D引擎使用了很多Ogre的代码,因此得名。
引擎使用VS2005构建,支持Unicode,工程附带三个演示,可以帮助开发人员迅速了解,Lsge最大的特点是使用简单,内置了很多兼而易用的功能。
Lsge是我大一、大二时的作品,设计的初衷是为了能快速写出小游戏,使开发者把注意力放在创造上,这个引擎的渲染效率不高,但是没有关系,引擎目标是小游戏,简单的演示,不是大规模游戏,在我设计期间,网络给了我所需要的大多数资料,让我有机会接触到Ogre,zlib,audiere,ois等巨人,有了他们的帮助,才有这个引擎的发展,引擎有完整的注释,文档比较完善。
很早就想开放Lsge,回报网络,只有开放才能避免固步自封,我始终认为我所了解的只是沧海一粟。在Lsge完成的很长一段时间里,我差点忘了他的存在,前几天我想起了他,认为我改写点东西,整理出来,让他不只是在我的硬盘中,这对一些开发者可能有帮助,发表出来,将让他重获新生,最后,再次感谢Ogre,zlib,audiere,ois等巨人,感谢网络,没有你们就没有Lsge。
附上一张引擎演示图(^_^):

附加说明:
选项配置:Lsge自带所需要的库,需要注意的是Lsge所需要的DX库需要特殊配置。


项目属性配置:
需要把调试->工作目录设为../Bin/$(ConfigurationName)

VS2005版本较多,主要分为sp1和非sp1版本,配置比较麻烦,经常会出现应用程序没有初始化之类的错误,这些可以通过安装正确地库一一排除。
Lsge下载:
blog不支持大文件,还要分割成五份,麻烦啊。
Lsge第一部分
Lsge第二部分
Lsge第三部分
Lsge第四部分
Lsge第五部分
1:XNA2.0做UI,场景编辑工具,粒子编辑工具的3D人才
2:场景布局策划,使用工具
3:网络开发,服务器构架
4:音频传输,网络大规模音频传输
以上四个各招一人,招贤纳士啦
公司:杭州汉宜信息技术有限公司
工作地点:杭州滨江区恒生大楼301,303
电话:0571-28937318
QQ:78939328