OGREFont的研究与OGRE的中文显示(三)小插曲

来源:互联网 发布:出国留学用哪种gpa算法 编辑:程序博客网 时间:2024/04/23 16:56

已经到了本系列的三了,按计划应该直接开始说我的字体类ODText,但是最近在开发上进度比较缓慢。
首先是到季末了,在忙一些非技术上的事情。其次是还想把效果和算法做的更好一些,因此想看看别人是怎么做的。
这就有了这篇小插曲。
1. CEGUI的FONT类
在网上看到了CEGUI可以支持中文输入,这使我萌生了看看它源代码的想法。感谢Crazy Eddie :-)
不出所料,CEGUI的Font类也是基于freetype2的。字体生成的原理和OGRE一样,获取Glyph,生成texture。但是效果
和功能却比OGRE强很多,我觉得在OGRE Font中缺少的baseline,ascender等参数都有定义(看来我之前
的想法还是正确地)。在Layout的时候还可以加上格式。看到这里我曾一度觉得我的字体类已经可以仍掉了,使用
CEGUI就行了。但是接下来,我发现CEGUI的Font类居然在update的时候把一个font face的charmap中所有的Glyph都
获取并render...如果是英文字库,没问题。但如果是simsun的话,2.2万个...我没有测试,因为我觉得这样做在启动
时会很慢,如果是大字体的话,时间和空间可能都会有问题。另外,Vertical Layout, Right 2 left, bold, italic
等功能也没有。看来,车轮还是要自己造。
2. Pango
如果你的系统是Linux,那么很可能你现在看到的文字就是用Pango生成的。我觉得这是个很让我着迷的项目。先说说
它的名字,Pan是希腊语,意思是所有的,也是英语中常见的词头,go是日语中语言的意思。所以Pango的名称预示着
它可以处理所有的语言(多么美好的一件事)。它可以使用freetype2生成文字信息,render时使用Cairo,也可以直接用
Windows GDI。
郁闷的事情发生在当我试图编译它的源代码时,使用VS废了半天时间竟然也编译不了。看到它的网站上写的"Building Pango
from source can at times be a difficult process.",只好放弃了。那么就开始研究源代码吧。
(未完待续......)

(2008-09-28继续)

最近一直在忙别的项目,中国的 挨踢人 生活难啊。

Pango的源代码看了一些,说实话,很久没看到纯C的代码了,还真不习惯大片的struct和宏。

主要看了Glyph存储部分和使用freetype render的部分。如果Pango layout engine可以很容易集成的话,它确实是个不错的选择。

但是话又说回来,在3D的程序中谁需要那些复杂的功能呢?还是回头继续完成我的ODText类吧。

layout,cach glyph和sub pixel是值得我继续学习的地方。

代码中比较有意思的一个地方是,定义的很多struct中都有parent_instance,这是一个所谓的父类指针。然后该struct的实例

可以通过parent_instance调用所谓的父类的方法和成员变量。这不已经是一种OOP的方式了吗?


由于ODText基于开源的freetype2,同时为给中国的开源社区作一点点贡献
这个项目作完后,我会公开ODText类的源代码。需要的TX,请到时候关注本博客

原创粉丝点击