ogre字体生成(中文显示)

来源:互联网 发布:免费sqlserver数据库 编辑:程序博客网 时间:2024/04/29 22:26

  好久没写博客了,今天写一下如何在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

原创粉丝点击