您的位置:首页 > 其它

ogre字体生成(中文显示)

2010-02-03 10:55 274 查看
好久没写博客了,今天写一下如何在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
E-Mial: howlet3@126.com
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: