c++ - 如何有效且正确地调整 ID3DXFont 的大小
问题描述
我正在寻找在 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 );
我怎样才能做到这一点?我尝试使用缩放/旋转/变换来简单地更改大小,但字体变得模糊,所以我正在寻找更“正确”的解决方案。
谢谢你。
解决方案
您遇到的问题是“光栅位图”字体的基本限制,而不是像 TrueType 这样的“矢量”字体。D3DXFont 是一种“光栅位图”解决方案,可将 TrueType 字体捕获到特定大小的位图中。这可以稍微缩放/旋转并且仍然保持不变,但是如果您像您所看到的那样改变大小,您会得到伪影。
但是,它非常快,因为它只是在绘制纹理。您还可以捕获几种不同大小的字体并根据分辨率选择一种。
D3DXFont 是 D3DX9 的一部分,这意味着它已被弃用。当然 Direct3D 9 也是旧版,因此您应该查看 Direct3D 11 和DirectX 工具包
SpriteFont/SpriteBatch
中的现代“光栅位图”字体解决方案。
高质量、高度可扩展的文本绘图的正确解决方案是使用像DirectWrite这样的“矢量字体”绘图系统。
推荐阅读
- php - 从链接 RegEx 中排除网站 url
- sql - SQL:每组取 1 个值
- python - 如何在 python 中使用 sqlalchemy 在查询中创建 sql server 表变量
- sql - 查找重复项并将其删除应用条件 SQL Server
- robotframework - 如何在示例 html 中找到包含特定文本的 Button 后跟 card_header-title
- c++ - 继承中类的模板类型
- javascript - 如何在 Lerna 包中共享构建脚本
- web-audio-api - 失谐振荡器似乎相互反弹
- arrays - 根据两个属性的唯一组合拆分对象数组
- android - 如何提高 Android 5 Custom Tablet 上 Nativescript Angular 5 App 的路由速度?