C++ 如何在DirectX 11中绘制文本?

C++ 如何在DirectX 11中绘制文本?,c++,directx,directx-11,C++,Directx,Directx 11,在DirectX 10中,您可以使用D3DX10提供的字体接口。在DirectX 11中,您应该使用DirectWrite。但看起来DirectWrite与Direct3D没有本机对话?有什么基本的东西我遗漏了吗?如何使用DirectX 11绘制简单文本?编辑2014: 正如在评论中指出的,RasterTek教程的链接不再起作用,这里是由提供的链接 原始答案的第二点也不再有效,因为现在可以与Direct2D共享D3D11 backbuffer,并通过DirectWrite绘制文本 2017年编辑

在DirectX 10中,您可以使用D3DX10提供的字体接口。在DirectX 11中,您应该使用DirectWrite。但看起来DirectWrite与Direct3D没有本机对话?有什么基本的东西我遗漏了吗?如何使用DirectX 11绘制简单文本?

编辑2014:

正如在评论中指出的,RasterTek教程的链接不再起作用,这里是由提供的链接

原始答案的第二点也不再有效,因为现在可以与Direct2D共享D3D11 backbuffer,并通过DirectWrite绘制文本

2017年编辑:

RasterTek仍在运行:


我知道两种选择

  • 让您自己的字体渲染引擎看到

  • 关于直接写入的第二个选项要求在d3d11和d3d10.1设备之间共享backbuffer,并使用dwrite+d2d+d3d10.1渲染gui和d3d11设备渲染三维几何体,并将其全部合并到backbuffer中


此时,dwrite和d2d不接受使用d3d11设备创建的曲面进行渲染。但希望微软能这么快做到。

我最近将一个DirectX 10应用程序转换为DirectX 11,在寻找相同答案的过程中发现了这篇文章。Zeela提到的Rastertek教程很好,但我继续搜索并找到了它。只花了大约30分钟,我就完成了将它集成到我的项目中的工作,它似乎工作得很好。下载部分提供x86和x64包,包括头、库和DLL。我只是在做一个简单的文本输出,所以我不能对API说太多,除了我所做的(每秒输出帧),它只需要大约5行代码(包括创建/释放包装器对象)。根据他的示例,它似乎提供了比我目前使用的多得多的选项。

库中有一个
SpriteFont
类,可以将文本渲染到DirectX11设备上下文。

使用,它支持高质量文本渲染、分辨率无关的轮廓字体以及完整的Unicode文本和布局支持。

嘿,Rasertek DX11教程看起来很棒!我要调查一下。每次我看到这些旧的rastertek链接我都会哭。这里是@RadioSpace的链接,感谢您指出该链接不再存在works@Zee感谢更新您的答案我一直在寻找D3D11/dxWrite的东西,但这让我把它搁置到周末,也许不像以前认为的那样麻烦DirectWrite是处理复杂文本渲染的最佳方式,尤其是国际(亚洲)字体。但是,请记住DirectWrite需要Direct2D,在DirectX 11.1运行时之前的Direct2D在Direct3D 11设备上渲染时使用有点困难(它本机使用Direct3D 10.1)。对于Windows应用商店应用程序、Windows Phone 8.x、Xbox One、Windows 8.x上的Win32桌面应用程序以及Windows 7 SP1上的Win32桌面应用程序(KB),您可以使用更简单的互操作。否则,它将使用DXGI共享曲面。