【发布时间】:2013-05-23 16:20:37
【问题描述】:
我在 OpenGL 中使用 wglUseFontBitmaps 绘制的字体为每个字母占用相等的空间(宽度),所以一个“。”例如,需要与“M”一样多的空间。我已将字体创建中的音高参数更改为VARIABLE_PITCH,但它并没有改变任何东西。它实际上可以用 wglUseFontBitmaps 完成,还是每个生成的位图都占用相等的空间是它的本质?
此外,我正在使用 GetTextExtentPoint32W() 查询光栅位图文本的宽度/高度。返回的宽度还可以,但高度总是太大。我在黑色文本后面绘制了一个明亮的矩形,以使其在 3d 场景中始终可读。为什么查询的高度这么大?是否为像“É”这样的高级字符保留了空间?
我的设置:
HFONT font; // Windows Font ID
font = CreateFont( -12, // Height Of Font
0, // Width Of Font
0, // Angle Of Escapement
0, // Orientation Angle
FW_EXTRALIGHT, // Font Weight
FALSE, // Italic
FALSE, // Underline
FALSE, // Strikeout
ANSI_CHARSET, // Character Set Identifier
OUT_TT_PRECIS, // Output Precision
CLIP_DEFAULT_PRECIS, // Clipping Precision
ANTIALIASED_QUALITY, // Output Quality
FF_DONTCARE | VARIABLE_PITCH, // Family And Pitch
(LPCWSTR)L"Arial"); // Font Name
SelectObject(this->hDeviceContext, font);
//init display lists for text drawing
bool createFontLists = wglUseFontBitmaps(this->hDeviceContext, 0, 255, 1000);
【问题讨论】:
-
这不是一个答案,而是一个建议:不要使用这个。如果要使用 OpenGL 绘制字体,请使用 FreeType。对于这类事情,它是一个更好的库。有一些开源库将 freetype 和 opengl 包装在一起。我相信FTGL是最成熟的。祝你好运。
-
谢谢。我看过 FTGL,但想不使用它,但我认为现在使用这样的库可能是更好的解决方案。