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,请到时候关注本博客
- OGREFont的研究与OGRE的中文显示(三)小插曲
- OGREFont的研究与OGRE的中文显示
- OGREFont的研究与OGRE的中文显示(一)引言
- OGREFont的研究与OGRE的中文显示(二) freetype2攻略
- 我开源了(兼结束“OGREFont的研究与OGRE的中文显示”系列)
- 有关物理学的小插曲
- 花旗杯的小插曲
- Hook的两个小插曲
- 冒泡排序的小插曲
- 猫眼三姐妹的插曲
- (转)关于volatile和原子操作研究的插曲
- 小插曲--输出1900-2020的闰年年份(函数的定义与调用)
- cocos2d-x 3.3 新功能研究过程中出现的小插曲
- 我学习上的一个小插曲
- 你只是别人的小插曲
- 关于 narrator.dll 的一个小插曲
- 关于memset使用的一点小插曲
- hibernate之session的方法小插曲
- java.io.CharConversionException: isHexDigit 出现错误的原因及其解决办法
- Struts、Hibernate和Spring的轻型J2EE架构的研究
- Window.ShowModalDialog使用详解
- JS获取浏览器窗口大小 获取屏幕,浏览器,网页高度宽度
- select 1 from 浅析
- OGREFont的研究与OGRE的中文显示(三)小插曲
- C++好书 推荐 努力在大学里在多看几本书
- 实现壁纸更换的示范代码
- AT91RM9200引导程序的建立(一)--------建立交叉编译工具链
- CreateWindow返回Handle失败
- sp_help
- 主键与外键的问题
- 实现执行外部程序,并等待程序结束的函数。
- 个人真实FireFox体验