在自Ogre1.4版本后,在Ogre中就增加了一个DisplayString用于在字符串中使用unicode字符,这样在程序中就可以使用汉字了。在http://www.cnblogs.com/gogoplayer/archive/2008/11/21/1189874.html这里,我们可以找到一种解决方法,通过在字体脚本中添加中文unicode来显示中文。 下面让我们先从程序开始吧!!
一定要包含下面两个头文件:
#include "OgreFontManager.h"
#include "OgreTextAreaOverlayElement.h"
在Ogre中还有一个类是用于字体的,它就是“Font”了。下面我们来加载一个中文字体:
- 创建一个Font:
- Ogre::FontPtr tempFont = Ogre::FontManager::getSingleton().create("TempFont","General");//第一个参数是字体名、第二个参数是字体要加入的资源组
- tempFont ->setSource("simhei.ttf");//设置字体源(字体文件名,这里加载华文楷体)
- tempFont ->setType(Ogre::FT_TRUETYPE);//设置字体类型(这里是"truetype"类型,Ogre支持二种类型,另 一种"image"类型可以看这里:http://hghhe.blog.163.com/blog/static/32377568200962484620536)
- tempFont ->setTrueTypeSize( 18 );//设置字体大小(这里不是显示汉字的大小,而是生成纹理的大小,也就是说如果值越 大生成纹理所花的时间也就越多)
- tempFont ->setTrueTypeResolution( 96 );//设置字体的打印分辨率,一般为96
- tempFont ->addCodePointRange(OgreFont::CodePointRange(19968,40869));//添加纹理生成范围。19969转成16进制就 是0x4E00,这个是汉字'一'对应的unicode编码。40869是unicode编码中最后一个汉字,这个汉字我的输入法没法 打出来...... 更多关于汉字的unicode编码请看:http://www.chi2ko.com/tool/CJK.htm 如果我们这样指定的话, Ogre就会生成这些汉字纹理,也就是说我们可以在程序中使用所有基本的汉字了。
- 当然我们还不能使用英文字母,添加:
- tempFont ->addCodePointRange(Font::CodePointRange(33,255));//就可以使用英文了。
- 在实际的应用中还应该加入半角和全角符号的unicode编码范围!!!
- 最后一步,
- tempFont ->load();
让我们来显示中文吧。可以在overlay脚本中定义TextAreaOverlayElement或在程序中生成(你可能需要添加头文件OgreTextAreaOverlayElement.h),这里假设textElement就是一个TextAreaOverlayElement类型的指针(可以用OverlayManager::getOverlayElement方法获取)。
显示汉字方法如下:
textElement->setFontName("TempFont");//(用脚本的话就无需这步设置字体了)
DisplayString chaText = L"使用Overlay显示汉字!!";
textElement->setCaption( chaText ); //这样就可以了。
下面发二张我测试时截的图片
按下Pause键后显示另一段汉字