我正在寻找在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 );
我该如何实现?我尝试使用缩放/旋转/变换来简单地更改大小,但是字体变得模糊,因此我正在寻找更“正确”的解决方案。
谢谢。
答案 0 :(得分:0)
您遇到的问题是“光栅位图”字体与TrueType等“矢量”字体的基本限制。 D3DXFont是一种“栅格位图”解决方案,可将TrueType字体捕获为特定大小的位图。可以按比例缩放/旋转它,但仍然有效,但是如果您改变大小,如所见,就会出现伪像。
但是,它非常快,因为它只是在绘制纹理。您还可以捕获几种不同大小的字体,然后根据分辨率选择一种字体。
D3DXFont是D3DX9的一部分,表示它是deprecated。当然,Direct3D 9也是旧版,因此您应该查看DirectX Tool Kit中的Direct3D 11和
SpriteFont/SpriteBatch
,以获得现代的“光栅位图”字体解决方案。
高质量,高可伸缩性文本绘图的正确解决方案是使用DirectWrite之类的“矢量字体”绘图系统。