Ogre1.4.x的Overlay显示中文的方法

简介:
Ogre1.4.x是支持中文的,不过因为公司使用的是古老的版本,所以一直除了看源码,也没有怎么去使用过它。很明显的,从1.4开始就加入了UTFString这个东西,这就意味着了可以支持多字节字符了。而且Font类也改变了很多。
虽然说Ogre是使用FreeType支持TTF的,但是最终Ogre还是将之转换成纹理的,所以我今天试了一下,使用了中文字体之后,启动速度真是慢的可以……code_point的区域至少包含了两万个字符。如此还不如做成点阵字库的好。

OK,下面开始工作!

第一步,准备好字体,随便什么字体都可以,只要是中文字体。从Windows/Fonts里面拷一个吧!我用的是雅黑字体,很漂亮的。把字体放到任何Ogre可以搜索到资源的地方,一般都在Media/font里面,就丢里面吧!pack/OgreCore.zip里面也有三个字体的,扔里面也是不错的选择。

然后开始写fontdef文件吧:
None.gifYaHei
ExpandedBlockStart.gif {
InBlock.gif    type         truetype
InBlock.gif    source         Yahei.ttf
InBlock.gif    size         12
InBlock.gif    resolution     92
InBlock.gif    code_points 33-166 12290-12291 19977-40959 65280-65312
ExpandedBlockEnd.gif}
以上内容,你可以单独保存一个fontdef文件,也可以加到别的fontdef文件的后面。
简单解释一下:type表示的是字体是什么类型,两种truetype、image;source 就是字体文件的源文件了;size是字体大小;resolution是字体的清晰度,用72或者96dpi就可以了。code_points是指定编码的范围的吧,格式是nn-mm,nn是开始范围,mm是结束范围。在上面代码里面,已经包含了至少两万的字符,很多了,启动时候会让你抓狂的。 14.gif

在这里,我们只是修改Ogre的Debug Overlay,因此我们还需要修改OgreCore.zip当中的OgreDebugPanel.overlay,将里面的BlueHighway全部都替换为YaHei。

好了,到这里资源部分的准备就好了,下面进入到C++代码的编码了。

打开OgreOverlayElement.h ,会发现这样一段代码:
None.gif #if OGRE_UNICODE_SUPPORT
None.gif    typedef UTFString DisplayString;
None.gif#    define OGRE_DEREF_DISPLAYSTRING_ITERATOR(it) it.getCharacter()
None.gif #else
None.gif    typedef String DisplayString;
None.gif#    define OGRE_DEREF_DISPLAYSTRING_ITERATOR(it) *it
None.gif #endif

由代码可知,如果Ogre支持Unicode的话,DispalyString这个类型其实是UTFString,也就是说是一个Unicode字符串。

随便打开一个Ogre自带的Sample,然后打开通用文件ExampleFrameListener.h ,找到:
None.gif         static String currFps = "Current FPS: ";
None.gif         static String avgFps = "Average FPS: ";
None.gif         static String bestFps = "Best FPS: ";
None.gif         static String worstFps = "Worst FPS: ";
None.gif         static String tris = "Triangle Count: ";
None.gif         static String batches = "Batch Count: ";
修改为:
None.gif         static DisplayString currFps = L"当前帧率: ";
None.gif         static DisplayString avgFps = L"平均帧率: ";
None.gif         static DisplayString bestFps = L"最佳帧率: ";
None.gif         static DisplayString worstFps = L"最差帧率: ";
None.gif         static DisplayString tris = L"三角形数: ";
None.gif         static DisplayString batches = L"批次: ";

嘎嘎,然后就可以跑跑看了! 
看截图:


PS:我刚才用最初的code_point居然漏掉了一个“三”字,无语死了!三是19977.这里有一个兄弟做的查看器:
下载页面: http://www.cnblogs.com/gogoplayer/archive/2008/05/09/1189795.html
下载地址: http://www.cnblogs.com/Files/gogoplayer/Ogre/UnicodeViewer.rar
在这里可以看到更多的信息。
目录
相关文章
|
计算机视觉
AutoCAD *.dxf文件解析,使用dxflib搞定polyline/spline/ellipse等复杂图形(★firecat推荐★)
AutoCAD *.dxf文件解析,使用dxflib搞定polyline/spline/ellipse等复杂图形(★firecat推荐★)
1333 0
AutoCAD *.dxf文件解析,使用dxflib搞定polyline/spline/ellipse等复杂图形(★firecat推荐★)
|
7月前
[笔记]音视频学习之SDL篇《六》使用SDL_ttf绘制True Type字体
[笔记]音视频学习之SDL篇《六》使用SDL_ttf绘制True Type字体
|
8月前
|
C++ 计算机视觉 Python
vs qt opencv c++图片相片查看编辑工具Image Viewer Image Editer
vs qt opencv c++图片相片查看编辑工具Image Viewer Image Editer
121 0
|
编解码 iOS开发 MacOS
Alien Skin Exposure2023调色滤镜插件RAW后期处理工具
Exposure2023是一款专为摄影艺术设计的图像编辑器。新的 Exposure2023结合了专业级的照片调整、庞大的华丽照片库和令人愉悦的高效设计。可以提供最大,最准确的电影外观选择。Exposure的创意外观不仅限于电影模拟,从干净优雅的现代风格到引人注目的色彩变化。您可以自定义Exposure的每个内置外观,然后将其另存为能够表达自己风格的独特外观。只需单击一下,即可重复使用自定义的预设,以在所有工作中获得一致的外观。
117 0
|
编解码 iOS开发 异构计算
Alien Skin Exposure2022最新版安装激活教程
Exposure 结合了专业级的照片调整,庞大的华丽照片外观库以及高效的设计,使其使用起来很愉悦。新的自动调整功能可简化您的工作流程,并使用户进入创意区。
399 0
|
编解码 iOS开发 异构计算
PS2022顶级插件Alien Skin Exposure X7中文版
Exposure 结合了专业级的照片调整,庞大的华丽照片外观库以及高效的设计,使其使用起来很愉悦。新的自动调整功能可简化您的工作流程,并使用户进入创意区。
1330 0
zbar中的zbar_scan_image 函数
zbar中的zbar_scan_image 函数
316 0
|
Windows
windows系统下运行QT视频播放器示例程序(Media Player Example )
windows系统下运行QT视频播放器示例程序(Media Player Example )
300 0
windows系统下运行QT视频播放器示例程序(Media Player Example )
|
Linux Windows
不支持图形化界面的Linux系统如何显示图像化界面?飞腾服务器显示图像化界面方法,DISPLAY environment variable is undefined问题解决方法
不支持图形化界面的Linux系统如何显示图像化界面?飞腾服务器显示图像化界面方法,DISPLAY environment variable is undefined问题解决方法
645 0
不支持图形化界面的Linux系统如何显示图像化界面?飞腾服务器显示图像化界面方法,DISPLAY environment variable is undefined问题解决方法