如何有效和正确地调整ID3DXFont的大小

时间:2018-12-19 09:31:54

标签: c++ directx directx-9

我正在寻找在for循环中调整DirectX字体对象的大小。参见以下示例:

for ( int i = 1; i < 20; i++ ) {
    // font size should be i
}

为每种可能的大小创建字体效率很低,所以我想知道是否可以创建某种包装程序或自己的字体渲染器,使我能够以良好的性能做到这一点?

如果我没有太多意义,请参见下面的另一个示例:

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

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

我该如何实现?我尝试使用缩放/旋转/变换来简单地更改大小,但是字体变得模糊,因此我正在寻找更“正确”的解决方案。

谢谢。

1 个答案:

答案 0 :(得分:0)

您遇到的问题是“光栅位图”字体与TrueType等“矢量”字体的基本限制。 D3DXFont是一种“栅格位图”解决方案,可将TrueType字体捕获为特定大小的位图。可以按比例缩放/旋转它,但仍然有效,但是如果您改变大小,如所见,就会出现伪像。

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

  

D3DXFont是D3DX9的一部分,表示它是deprecated。当然,Direct3D 9也是旧版,因此您应该查看DirectX Tool Kit中的Direct3D 11和SpriteFont/SpriteBatch,以获得现代的“光栅位图”字体解决方案。

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