Irrlicht是一个基于C++开源的3D引擎,中文名叫鬼火引擎。成立团队现在基本走光了,只剩下一个德国人Michael还在苦苦坚持。老实讲,不推荐大家去用这款引擎,特别是商用。因为实在太老了,最高支持到D3D9,特别对字体的支持很差,对3D模型的加载支持也很差。但作为C++的3D引擎的学习材料还是可以的。
由于Irrlicht自己的字体只能使用图片字体,像这样的:
基本不能支持中文,所以我基于D3D9的字体sample将系统字体的支持添加到IGUIFont里面。这部分代码我也发给了Michael,他表示现在忙成狗,估计近期都无法抽出时间上传。
更新后的字体使用是这样的:
gui::IGUIEnvironment* guiEnv = device->getGUIEnvironment();
gui::IGUIFont* fontyh40h = NULL, *fontyh40n = NULL, *fontarial40n = NULL;
gui::SD3D9FontDesc desc(L"微软雅黑", 40, FW_HEAVY, false);
fontyh40h = guiEnv->getFont(desc);
desc.fontWeight = FW_NORMAL;
desc.italic = true;
fontyh40n = guiEnv->getFont(desc);
desc = gui::SD3D9FontDesc(L"Arial", 40, FW_NORMAL, false);
fontarial40n = guiEnv->getFont(desc);
增加了一个结构体,SD3D9FontDesc:
struct SD3D9FontDesc
{
wchar_t fontName[100];
u32 fontSize;
u32 fontWeight;
bool italic;
IRRLICHT_API SD3D9FontDesc(wchar_t* fontName, u32 fontSize, u32 fontWeight, bool italic);
bool operator ==(const SD3D9FontDesc &decs) const;
bool IsEqual(const SD3D9FontDesc* decs) const;
};
通过字体名,字体大小,字体重量也就是粗细,还有是否斜体这四个属性来从系统字体库中生成字体。
draw的函数目前和过去用同一个,但是Clip是无效的,而且无法支持右对齐和底部对齐。
fontyh40h->draw(L"微软雅黑40号,Heavy.",
rect,
video::SColor(255, 255, 255, 255),
true, true);
打包的库文件下载:https://download.csdn.net/download/luoyu510183/10854154