- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我使用 wglUseFontBitmaps 在 OpenGL 中绘制的字体为每个字母占用相等的空间(宽度),因此“。”例如,需要与“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 在每个字符之间绘制了一个空格“”。问题是 std::wstring
的用法用于调用由 wglUseFontBitmaps
生成的显示列表.
错误的绘图如下所示:
int length = wcslen(text.c_str());
glCallLists (sizeof(wchar_t) * length, GL_UNSIGNED_BYTE, text.c_str());
length
只要。第二个参数告诉 OpenGL 如何将 text.c_str 中的每个字符解释为定义下一个要调用的显示列表的偏移量,这里是错误的。它必须是 GL_UNSIGNED_SHORT,它是 0-65535 之间的 2 个字节。对于 GL_UNSIGNED_BYTE,用于 2 字节字符的 wstring 中第二个字节的每个“0”都被解释为空格。所以正确的调用是:
glCallLists (length, GL_UNSIGNED_SHORT, text.c_str());
关于winapi - OpenGL 和 wglUseFontBitmaps 只绘制等距的字母,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16604574/
我在 OpenGL 中创建一个游戏,它在加载时加载整个 Arial Unicode MS 字体。该程序平均使用。我的计算机上有 10 兆内存(op sys 是 WinXP SP2)并且运行没有问题,但
我使用 wglUseFontBitmaps 在 OpenGL 中绘制的字体为每个字母占用相等的空间(宽度),因此“。”例如,需要与“M”一样多的空间。我已将字体创建中的间距参数更改为 VARIABLE
我是一名优秀的程序员,十分优秀!