Как вы рисуете текст в DirectX 11? - PullRequest
15 голосов
/ 19 апреля 2011

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

Ответы [ 4 ]

8 голосов
/ 19 апреля 2011

Редактировать 2014:

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

Второй пункт исходного ответа также больше не действителен, потому что теперь стало возможным совместно использовать буфер D3D11 с Direct2D и через него рисовать текст с DirectWrite.

Редактировать 2017:

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


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

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

  • второй вариант, касающийся прямой записи, требует совместного использования буферного буфера между устройствами d3d11 и d3d10.1 и использования dwrite + d2d + d3d10.1 для рендеринга графического интерфейса пользователя и устройства d3d11 для рендеринга трехмерной геометрии и объединения всего этого в буферный буфер см. сообщение от DieterVW на эту тему

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

7 голосов
/ 03 июля 2013

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

7 голосов
/ 24 октября 2011

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

6 голосов
/ 26 декабря 2013

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

...