在OGRE1.7.0的SdkTrays界面上试验中文

不算地道原创,他山之玉,我再来磨磨。在http://bbs.ogre3d.cn/forums/bbs/viewthread.php?tid=1138&extra= 也发了一下

 

首先找到了这两篇参考文章:
(1)http://www.cnblogs.com/gogoplayer/archive/2008/05/09/1189874.html
(2)http://hghhe.blog.163.com/blog/static/3237756820097192512944/
这两个都是在1.7之前版本上试验的。

与文章(1)中步骤形成对照,按下面的顺序实行:
1、现在Media/packs/下没有OgreCore.zip这个文件了,要修改SdkTrays界面的中文显示,须修改SdkTrays.zip下的内容。

2、我向SdkTrays.zip里添加了微软雅黑的字体msyh___0.ttf

3、打开SdkTrays.zip中的SdkTrays.fontdef,里面有SdkTrays/Caption和SdkTrays/Value两个定义块,一个主要为控件标题用(如按钮上显示的文字),一个主要为控件含有的内容用(如文本框里的说明)。我直接把两者里的source字段后内容换成msyh___0.ttf了。当然还要加上code_points字段和后面的值(常用汉字以及英文字母字符等)。

4、因为我没有像文章(1)中的第3步那样追加字体定义,所以这步SdkTrays.overlay就不用修改了。

5、这一步有区别了。
在sample.h中有这个成员变量Ogre::NameValuePairList mInfo;专门记录加载例子的信息,追溯NameValuePairList 的定义,在ogrecommon.h文件中:
typedef map<String, String>::type NameValuePairList;
这里需要改成:typedef map<String, UTFString>::type NameValuePairList;
同时应该还要在ogrecommon.h里包含一下头文件文件OgreUTFSring.h

6、上面完成后,到Terrain.h中Sample_Terrain构造函数内,将
mInfo["Title"] = "Terrain";
改成
mInfo["Title"] = L"地形";

7、最后编译生成:结果如图:

 

问题
正如文章(2)提到,这里有个效率和灵活性的问题:如果希望能显示很多汉字,那么字体定义的code_points字段后面就要加上很多值,从而生成文字纹理会占用一定时间;但如果只添加你需要的汉字,那么每次想更改汉字显示内容,就要手工添加一些值,比较麻烦。

不知道有没有一劳永逸的方法?

在论坛里搜了一下,发现这位朋友提的文字
http://bbs.ogre3d.cn/forums/bbs/ ... =%E4%B8%AD%E6%96%87

为什么
RenderWindow* initialise(bool autoCreateWindow, const String& windowTitle = "模拟训练系统", const String& customCapabilitiesConfig = StringUtil::BLANK);
       这个代码就能使窗口标题显示汉字呢?

我也不明白,源码里,追到OgreRenderSystem.cpp里的
RenderWindow* RenderSystem::_initialise(bool autoCreateWindow, const String& windowTitle)
似乎就没头绪了

 

 

========================== 2010年7月5日 补充 ============================

 

中文显示时,SelectMenu在addItem时加不进去两个以上汉字的原因:

SelectMenu继承Widget,Widget::fitCaptionToArea()函数用来将文字合适地填充进控件标题。其中

会不恰当地引起截断,所以造成错误。这个函数可整个简化成:

area->setCaption(caption);

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值