搞了两天了,终于把Ogre中使用中文搞通了(无论是overlay上显示还是公告板显示),中间过程中把GameRes上的相关文章都看了一遍,对字符集、trueType、freeType等概念都搞清楚了,其中有用GDI,windows API,改写ogre,动态生成纹理好多解决方案。但可能本人太懒,急于找到一种可行法案即可,效率神马的先不考虑。
如何在Ogre中使用字体(如定义fontdef)大家可以去翻翻教材,显示中文的主要区别就是:
1 fontdef中加载的是一种支持中文的trueType(ttf,ttc)
2 fontdef中添加code_point,这里指的是中文的unicode编码,我现在写的是code_points 33-166 19968-40869,这里加载了20000多个汉字,导致载入速度过慢,看到一哥们说静态载入gb2312里面的常用3000多个字,正向他请教,如果你setCaption的中文没有在code_point中,会导致运行错误
3 setCaption这个函数的字符必须是UTFString(DisplayString),即在字符串前+L,如L"平均帧数",加L让编译器知道这是一个unicode字符,否则会找不到对应的code_point而导致无法显示
另外一个针对overlay显示的问题是,最好把ttf、fontdef、overlay文件放到一个档案,因为Ogre中有载入资源顺序,否则可能系统先读fontdef文件时找不到ttf文件,这样也会导致系统出错,同样的道理也出现在compositor,不过compositor只会导致合成器效果出不来,当初遇到这个问题在google搜了好久都有答案,无意研究了下资源载入才发现的。
至于公告板中显示中文,你可以申请字符数量相等的公告板,然后通过调用字体的材质取得每个字的uv坐标,贴到每个公告板上。更好的方法是使用一个MovableTex类,在http://www.ogre3d.org/tikiwiki/tiki-index.php?page=MovableText可以下载到,但是这个类并不支持中文,一哥们把这个类改写了一下可以支持中文了,可以到http://hi.baidu.com/_invasion/blog/item/5f6590ca35d80ff552664faf.html#0下载
好啦 既然ogre的中文搞定了,下一步就可以写一个小demo了,初步计划可以和一个NPC对话