C++ 如何高效正确地调整ID3DXFont的大小

C++ 如何高效正确地调整ID3DXFont的大小,c++,directx,directx-9,C++,Directx,Directx 9,我希望在for循环中调整DirectX字体对象的大小。请参见下面的示例: for ( int i = 1; i < 20; i++ ) { // font size should be i } 我怎样才能做到这一点?我尝试使用缩放/旋转/变换来简单地更改大小,但字体变得模糊,因此我正在寻找一个更“正确”的解决方案 谢谢。您遇到的问题是“光栅位图”字体与“矢量”字体(如TrueType)的基本限制。D3DXFont是一种“光栅位图”解决方案,它将TrueType字体捕获到特定大小的

我希望在for循环中调整DirectX字体对象的大小。请参见下面的示例:

for ( int i = 1; i < 20; i++ ) {
    // font size should be i
}
我怎样才能做到这一点?我尝试使用缩放/旋转/变换来简单地更改大小,但字体变得模糊,因此我正在寻找一个更“正确”的解决方案


谢谢。

您遇到的问题是“光栅位图”字体与“矢量”字体(如TrueType)的基本限制。D3DXFont是一种“光栅位图”解决方案,它将TrueType字体捕获到特定大小的位图中。这可以进行一定程度的缩放/旋转,并且仍然有效,但是如果您像您所看到的那样大量更改大小,则会出现瑕疵

但是,它非常快,因为它只是绘制纹理。您还可以捕获几种不同大小的字体,并根据分辨率选择一种

D3DXFont是D3DX9的一部分,也就是说它是。当然,Direct3D 9也是传统的,因此您应该在中查看Direct3D 11和
SpriteFont/SpriteBatch
,了解现代“光栅位图”字体解决方案

高质量、高可伸缩文本绘图的正确解决方案是使用“矢量字体”绘图系统,如

// DirectX9
// calling D3DXCreateFont every loop would be incredibly inefficient.

ID3DXFont *example_font;
D3DXCreateFont( device, 14 /* font size - we want this to change */, ..., &example_font );