Как вы рисуете текст в DirectX 11?

В DirectX 10 вы можете использовать интерфейс шрифта, предоставляемый D3DX10. В DirectX 11 вы должны использовать DirectWrite. Но похоже, что DirectWrite не говорит напрямую для Direct3D? Есть что-то основное, что мне не хватает? Как вы рисуете простой текст с помощью DirectX 11?

Ответы

Ответ 1

Изменить 2014:

Как указано в комментарии, ссылка на учебники RasterTek больше не функционирует, вот ссылка на Webarchive of RasterTek, предоставляемый RadioSpace.

Вторая точка исходного ответа уже недействительна, так как теперь можно разделить D3D11 backbuffer с Direct2D и через него нарисовать текст с помощью DirectWrite.

Изменить 2017:

RasterTek все еще работает: рендеринг шрифтов в D3D11


Я знаю о двух вариантах

  • создайте собственный движок рендеринга шрифтов, см. Учебник Rastertek DX11

  • Второй вариант, касающийся прямой записи, требует совместного использования backbuffer между устройствами d3d11 и d3d10.1 и использования dwrite + d2d + d3d10.1 для визуализации GUI и устройства d3d11 для рендеринга 3D-геометрии и объединения всех его в backbuffer см. сообщение от DieterVW в этой теме

В настоящий момент dwrite и d2d не принимают поверхность, созданную с помощью устройства d3d11 для рендеринга. Но, надеюсь, MS сделает это так скоро.

Ответ 2

Недавно я преобразовал приложение DirectX 10 в DirectX 11 и наткнулся на это сообщение, ища тот же ответ. Учебник Rastertek, упомянутый Zeela, хорош, но я продолжил поиск и нашел FW1FontWrapper. Спустя примерно 30 минут я только что закончил интегрировать его в свой проект и, похоже, работает отлично. Раздел загрузки содержит как x86, так и x64 пакеты, включая заголовок, библиотеку и DLL. Я просто делаю простой вывод текста, поэтому я не могу много говорить об API, за исключением того, что для того, что я сделал (вывод кадров в секунду), потребовалось всего 5 строк кода (включая создание/освобождение объекта-оболочки). Основываясь на его образцах, похоже, он предоставляет намного больше возможностей, чем то, что я использую до сих пор.

Ответ 3

В DirectXTK существует класс SpriteFont, который может отображать текст в контекст устройства DirectX11.

Ответ 4

Используйте DirectWrite, он поддерживает высококачественный текстовый рендеринг, независимые от разрешения контурные шрифты и полную поддержку текста и макета Unicode.