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