你如何在DirectX 11中绘制文本?

Dar*_*nor 15 c++ directx directx-11

在DirectX 10中,您可以使用D3DX10提供的字体界面.在DirectX 11中,您应该使用DirectWrite.但看起来DirectWrite本身并不能说Direct3D?有什么基本的东西我不见了吗?如何使用DirectX 11绘制简单文本?

Zee*_*Zee 8

编辑2014:

正如评论中所指出的,RasterTek教程的链接不再起作用,这里是RadioSpace提供的RarchTek的Webarchive链接.

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

编辑2017:

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


我知道两个选择

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

  • 关于直接写入的第二个选项需要在d3d11和d3d10.1设备之间共享后台缓冲,并使用dwrite + d2d + d3d10.1渲染gui和d3d11设备渲染3d几何体并将其全部合并到后台缓冲区中查看DieterVW在此线程上的帖子

此时dwrite和d2d不接受用d3d11设备创建的表面进行渲染.但希望MS能够很快成功.


Tim*_*man 7

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


Dae*_*min 7

DirectXTK库中有一个SpriteFont类可以将文本呈现给DirectX11设备上下文.


Fai*_*sal 6

使用DirectWrite,它支持高质量的文本呈现,与分辨率无关的轮廓字体,以及完整的Unicode文本和布局支持.

  • DirectWrite是处理复杂文本呈现(尤其是国际(亚洲)字体)的最佳方法。但是,请记住,DirectWrite需要Direct2D,并且在DirectX 11.1 Runtime之前使用Direct2D在Direct3D 11设备上进行渲染(本机使用Direct3D 10.1)时要使用它有点挑战。对于Windows应用商店应用程序,具有KB [2670838](http://support.microsoft.com/kb/2670838的Windows Phone 8.x,Xbox One,Windows 8.x上的Win32桌面应用程序和Windows 7 SP1上的Win32桌面应用程序),您可以指望更轻松的互操作。否则,它将使用DXGI共享曲面。 (2认同)