【问题标题】:Shortest path to render from DirectWrite to Direct3D11?从 DirectWrite 渲染到 Direct3D11 的最短路径?
【发布时间】:2011-10-12 04:29:56
【问题描述】:

自从我学习了 DirectX 7 后,人发生了很大的变化。

我所看到的所有地方(Wikipedia 除外),它说我必须先从 DWrite 渲染到 D2D 或 GDI,然后才能做任何事情。

那篇维基百科的文章错了吗?我不能渲染到 Direct3D 吗?

我想避免渲染到 D2D,因为显然,要让 D2D 写入 D3D,您还必须打开 D3D10.1 设备。

难道真的只需要在 D3D11 中渲染文本吗?

【问题讨论】:

    标签: direct3d directwrite


    【解决方案1】:

    不幸的是,Microsoft 决定从其 DirectX API 中删除本机文本支持。现在您可以使用 DirectWrite,然后如您所说的渲染到 GDI 或 D2D,这有点笨拙,或者,创建自己的字体处理类,并使用它(这是我为我的项目选择的)。

    这里有一个关于如何生成自定义字体处理类的很好的教程:http://www.rastertek.com/dx11tut12.html

    显然,您应该编写自己的,但它提供了一个很好的起点,并允许您查看所有必要的程序(您可能想要添加的内容是对多种字体的支持,我建议为此创建一个字体类,您的 Font-Handler 将其与关联字符串一起存储在 std::map) 中。

    希望这会有所帮助! :)

    【讨论】:

    • 谢谢沙克塔尔。那么从 D2D 到 D3D11,我还需要通过 D3D10.1 吗?
    • 您可以使用 D3D10 打包的 DXGI 来获得一个 IDXGISurface,然后您可以通过调用 CreateDxgiSurfaceRenderTarget 将其用作 D2D 的 RT。你可以找到更多关于使用它的信息,here。不幸的是,我们需要获取我们的 D3D10.1 设备,然后在渲染 3D 场景后将 D2D 信息混合到我们的缓冲区。这是一种糟糕的做法,但微软已经意识到了这个问题,并且他们可能会在未来重新添加 ID3D10Font。但是现在创建自己的字体处理程序是最佳方式! :)
    • 呸。自 2009 年以来人们一直在谈论它,所以我敢打赌,至少要等到 DirectX12 才能将其放回原处。我想说我可以制作自己的基于精灵的字体解决方案,但这有点对于有数千个字形的东亚语言来说是不切实际的。我想我必须通过 D3D10.1。
    • 是的,我认为他们可能会等到 DirectX 12 之后再创建 ID3D12Font(或他们称之为接口的任何名称)。每个角色都必须在游戏中吗?或者你有让玩家可以与其他玩家交谈的功能吗?否则你可以有一个艺术家驱动的字体系统,当你发现你需要它时,你可以向你的艺术家请求一个字符(或自己制作)?
    • 说实话,两者都不是。我没有做任何特别重要的事情。我最近一直处于低迷状态,所以我一直在重新学习 D3D 以试图让自己感觉更好。我记得文本渲染比现在容易得多,所以我想我可能做错了什么。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-11
    • 2018-02-28
    • 1970-01-01
    • 1970-01-01
    • 2016-02-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多