ID3DXFont : 文本被拉伸,如何获取字体的宽度和高度?
Posted
技术标签:
【中文标题】ID3DXFont : 文本被拉伸,如何获取字体的宽度和高度?【英文标题】:ID3DXFont : Text is stretched, how to get font's width & height? 【发布时间】:2019-12-14 08:47:05 【问题描述】:我正在尝试为我的自定义游戏引擎添加字体支持。我在 VS2012 中使用 C++ 和 DirectX 9。问题:当你创建一个ID3DXFont对象时,你必须分别指定字符的宽度和高度,但是不同字体的纵横比(宽度/高度)是不同的,从而使一种字体被拉伸,另一种正常。
拉伸的“OCR A Extended”字体:https://imgur.com/MC7hP8L 正常的“Pristina”字体:https://imgur.com/jHX2xFk我尝试在 Google 和其他论坛上搜索可能的函数来从系统或其他来源获取这两个值,但没有运气...
现在,我正在手动输入:
ID3DXFont* f;
D3DXCreateFont(
m_context->getD3Ddevice(),
size, size / 4.0F, // this part is the issue
FW_REGULAR,
0,
false,
DEFAULT_CHARSET,
OUT_DEFAULT_PRECIS,
DRAFT_QUALITY,
DEFAULT_PITCH | FF_DONTCARE,
m_name,
&f );
这段代码没有修改过,就是操作上面两张图显示的文字的那个。
【问题讨论】:
"VS2012" - 哇,老派。您可能想要升级它并利用 C++17 以及过去(几乎)10 年来所做的所有改进.. 【参考方案1】:好的,所以我错过了来自 Microsoft 的重要帮助:DirectX Samples(来自 DirectX SDK)。
显然有一个关于如何绘制文本的问题,解决方案是简单地为宽度参数输入 0:
D3DXCreateFont(
m_context->getD3Ddevice(),
size, 0, // In order, height & width
FW_REGULAR,
0,
false,
DEFAULT_CHARSET,
OUT_DEFAULT_PRECIS,
DRAFT_QUALITY,
DEFAULT_PITCH | FF_DONTCARE,
m_name,
&f );
【讨论】:
以上是关于ID3DXFont : 文本被拉伸,如何获取字体的宽度和高度?的主要内容,如果未能解决你的问题,请参考以下文章