Как вы рисуете текст в 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.