如何有效,正确地调整ID3DXFONT大小

How to efficiently and correctly resize ID3DXFont

本文关键字:正确地 调整 ID3DXFONT 大小 何有效 有效      更新时间:2023-10-16

我希望将DirectX字体对象大小尺寸在for循环中。请参阅下面的示例:

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 );

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

谢谢。

您遇到的问题是'栅格位图'字体的基本限制,而不是像trueType这样的'vector'字体。D3DXFONT是一种"栅格位图"解决方案,可在特定尺寸的情况下捕获TrueType字体中的位图。可以将其缩放/旋转,但仍然可以固定,但是如果您经常更改大小,则会获得工件。

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

d3dxfont是d3dx9的一部分,这意味着它被弃用。当然,direct3d 9也是遗产,因此您应该在DirectX工具套件中查看Direct3d 11和SpriteFont/SpriteBatch,以获取现代的"栅格位图"字体解决方案。

正确的高质量,高度可扩展的文本图的正确解决方案是使用诸如DirectWrite之类的"向量字体"图形系统。