代码之家  ›  专栏  ›  技术社区  ›  user1182183

DirectX 9字体库?

  •  0
  • user1182183  · 技术社区  · 11 年前

    我看了DirectX文档中的Font类 this/these question/answers 但它们不能满足我的需要。

    我试着搜索“C++DirectX 9字体库”,但没有得到任何有用的结果。

    有没有可用的DX9字体库,例如,可以加载TTF字体(如Arial),然后在屏幕上绘制它们?

    这个 current 我正在使用的类确实满足了我的大部分需求,但非常有缺陷:(就我而言,当我在其中绘制信息的第三方应用程序中替换标签时,它会崩溃,而且不知何故它不在我的DLL中)。

    2 回复  |  直到 7 年前
        1
  •  1
  •   Ivan Aksamentov - Drop    11 年前

    是时候编写自己的位图字体渲染器了! 您需要:

    • 良好的字体加载程序( FreeType )
    • 纹理图谱:一个包含所有字母的大纹理和一个保存每个字母元数据的字典
    • 某种精灵批次:高效的精灵绘制

    循序渐进:

    1. FreeType:加载字体文件并将每个字符渲染为小位图
    2. 您的图集创建:将所有小位图合并(blit)到大图集纹理中,并将每个字符的属性(坐标、大小、紧排等)存储在“图集字典”中。
    3. 使用sprite批处理从图集中绘制字符(使用字典)

    好吧,第一次你可以从一些事情开始,比如:从FreeType中获取角色的位图并直接绘制,但我认为性能会很低。

    更新: 很难就这样的主题写一个小例子,但是:

    • 关于字体加载库,您可以阅读 docs
    • 关于你可以看的地图集 Chad Vernon's blog 。它是C#,但对于C++编码器来说,语法很容易理解。 BitmapCharacterSet 他的密码是阿特拉斯。
    • 关于sprite批处理:检查 Frank Luna 书籍和/或源代码。在他的小型utils库中,他也有一个字体渲染器
        2
  •  0
  •   Tobias Schlegel    11 年前

    你可能想看看BMFont( http://www.angelcode.com/products/bmfont/ )其将TTF字体转换为位图。然后可以使用以下代码进行渲染: http://www.angelcode.com/dev/bmfonts/

    不过,它还不是一个现成的库。