如何在DirectX 11中绘制文本

How do you draw text in DirectX 11?

本文关键字:绘制 文本 DirectX      更新时间:2023-10-16

在DirectX 10中,您可以使用D3DX10提供的字体接口。在DirectX 11中,你应该使用DirectWrite。但是看起来DirectWrite不支持Direct3D?我是不是漏掉了什么基本的东西?如何用DirectX 11绘制简单的文本?

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

Edit 2014:

正如评论中指出的那样,RasterTek教程的链接不再起作用,这里是RadioSpace提供的RasterTek网页链接。

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

编辑2017:

RasterTek仍在运行:字体渲染在D3D11


我知道有两个选项

  • 制作自己的字体渲染引擎,参见Rastertek DX11教程

  • 关于直接写入的第二个选项需要在d3d11和d3d10.1设备之间共享backbuffer,并使用dwrite + d2d + d3d10.1渲染gui和d3d11设备渲染3d几何图形并将其合并到backbuffer中,参见DieterVW在此线程上的帖子

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

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

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