Ogre字体生成(显示中文)转

   好久没写博客了,今天写一下如何在ogre中使用自己的字体.

ogre中主要有两种方式生成字体: 一种是利用truetype字体生成字体纹理, 在材质中字体使用的资源往往以.ttf的形式存在 另一种是用自己画的图片生成字体. 在材质中只要提供一张图片(纹理)即可.

下面分别介绍一下这两种字体的实现方式.

1. 利用truetype字体生成字体纹理 这种方式比较轻松, 打开 ogreSDK(我的版本是1.6.4)的media\fonts文件夹 会看到一个sample.fontdef文件 和solo5.ttf文件. 打开sample.fontdef 看到如下定义: StarWars { // Now this one I agree with ;) // A Star Wars font :) type truetype source solo5.ttf size 16 resolution 96 }

上面就是ogreSDK为我们定义了StarWars这样的字体

下面主要介绍参数的意义: type 告诉ogre使用truetype方式生成字体 source 要使用的字体库(这些字体库网上可以下载) size 字体的大小 resolution 按每英寸中的点数计算的清晰度(官方手册的解释)

此外还有antialias_colour, code_points nn-nn [nn-nn] ..参数 可以参考官方资料

就这样,一个新的字体就定义完成了,在ogre中使用FontManager::getSingleton().getByName(“StarWars”); 就能获取这个字体了。 注意: 这样设置字体不能显示中文。如果要显示中文,首先要确定你的字体(.ttf)能支持中文. 然后在字体定义中加上 code_points 33-166 19968-40869。这个表示字符的编码范围
2. 利用现有的纹理生成字体 在正常情况下,很少自己去作一种能生成所有中文字的字体。因为要达到这样的目的的话你的图片中必须包涵所有的中文字体。 以及在sample.fontdef要索引所有的文字对应的纹理的位置(下面会提到如何索引);为了简单起见,这里以只能生成0-9这

几个字符的字体作为介绍. 假如现在有张0-9的图片number.tga,在纹理坐标中0对应的纹理区间(u,v坐标)是(0, 0), (0.1 1) 1对应的纹理区间(u,v坐标)是 (0.1, 0), (0.2, 1) 2对应的纹理区间(u,v坐标)是(0, 0.2), (0.3 1)....以此类推。 那么要生成一个新的字体 我们可以在sample.fontdef中如下定义: NumberFont { type image source number.tga glyph 0 0.0 0.0 0.1 1.0 glyph 1 0.1 0.0 0.2 1.0 glyph 2 0.2 0.0 0.3 1.0 glyph 3 0.3 0.0 0.4 1.0 glyph 4 0.4 0.0 0.5 1.0 glyph 5 0.5 0.0 0.6 1.0 glyph 6 0.6 0.0 0.7 1.0 glyph 7 0.7 0.0 0.8 1.0 glyph 8 0.8 0.0 0.9 1.0 glyph 9 0.9 0.0 1.0 1.0 size 32 resolution 55 } 下面主要介绍参数的意义: type 告诉ogre使用现有的纹理生成字体 source 要使用的纹理

glyph 字符对应的纹理(第一参数表示要生成的字符,后面几个参数表示该字符对应的纹理坐标) size 字体的大小 resolution 按每英寸中的点数计算的清晰度(官方手册的解释) 就这样,又一个新的字体就定义完成了,同样在ogre中使用FontManager::getSingleton().getByName(NumberFont); 就能获取这个字体了。
不对或者需要改进的地方请高手们指点~_~
参考资料:OGRE中文帮助手册(文档:手册:1-4-0:3.5 字体定义脚本)
转载或修改请说明出处 链接:http://blog.csdn.net/howlet2/archive/2010/02/03/5284107.aspx 作者:howlet

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/howlet2/archive/2010/02/03/5284107.aspx

 

posted on 2012-11-20 11:32  virtorld小康  阅读(575)  评论(0编辑  收藏  举报

导航