#text #directx #gdi #rendering #direct3d
#текст #directx #gdi #визуализация #direct3d
Вопрос:
Я удивлен, что Google не проливает много света на это.
Я создаю простой просмотрщик САПР с использованием Direct3D. Из-за его природы (функциональность масштабирования и т.д.) Текстовые элементы должны быть векторным текстом; Я не могу использовать текстурированные поля.
Я вызвал в gdi32.dll чтобы получить глифы и создать вполне приемлемые контуры текста из прямых линий и кривых Безье, однако текст не является сплошным, а точки не обязательно являются регулярными каким-либо образом. Заключающие символы (b, p, o, A и т.д.) На самом деле имеют более одного отдельного контура.
Как следствие, я не могу просто поместить точки в буфер вершин и указать примитивный тип.
Все, что я могу сделать на данный момент, это отобразить контуры в виде линейных полос, в результате чего получится текст hallow.
Кто-нибудь может предложить хорошую стратегию для рендеринга сплошного векторного текста с их контурами?
Обратите внимание, что я интерполирую кривые Безье в списки точек (многие люди используют шейдеры / колдовство).
Ответ №1:
Вы не указываете, какую версию DirectX вы используете, но служебная функция D3DXCreateText создаст 3D-сетку для заданного текста любым шрифтом TrueType. Если вам нужна 2D-версия, просто используйте выдавливание без выдавливания или с минимальным выдавливанием и прямую ортогональную проекцию.
Если вам нужны четкие контуры, вы могли бы либо (а) объединить этот подход с контуром, который у вас уже есть, (б) дважды нарисовать текст в несколько ином масштабе (в зависимости от текущего уровня масштабирования), либо (в) использовать шейдеры для рисования контура, идеального для пикселей.
Скриншот точного внешнего вида, который вам нужен, может помочь. Все мои чертежи САПР содержат сплошной текст, без контуров.
Комментарии:
1. Direct3D 9 через SlimDX, однако, похоже, я нигде не могу найти D3DXCreateText в нем; Я предполагаю, что они его не раскрыли.
2. Согласно источнику, SlimDX предоставляет его через Mesh. CreateText() .
Ответ №2:
Я создаю текстовые сетки с помощью D3DXCreateText (Win32, DX9). Они красиво поворачиваются. Однако они всегда кажутся одинаковыми по размеру, независимо от высоты шрифта, выбранного в DC.
Линии сетки из меньших символов имеют псевдонимы и плохо смотрятся на видеокартах без мультисэмплинга.