Заполнение текстовых контуров в Direct3D

Я удивлен, что Google не проливает на это много света.

Я создаю простую программу просмотра САПР с использованием Direct3D. По своей природе (функция масштабирования и т. Д.) Текстовые элементы должны быть векторным текстом; Я не могу использовать текстурированные полигоны.

Я позвонил в gdi32.dll, чтобы получить глифы и создать вполне разумные текстовые очертания из прямых линий и кривых Безье, однако текст не сплошной, и точки не обязательно должны быть правильными. Заключительные символы (b, p, o, A и т. Д.) Фактически имеют более одного отдельного контура.

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

Все, что я могу сделать на данный момент, - это визуализировать контуры в виде линейных полос, в результате чего получается пустой текст.

Может ли кто-нибудь предложить хорошую стратегию для рендеринга сплошного векторного текста с его контурами?

Обратите внимание, что я интерполирую кривые Безье в списки точек (многие люди используют шейдеры / колдовство).


person Toby Wilson    schedule 09.05.2011    source источник


Ответы (2)


Вы не указываете, какую версию DirectX используете, но указываете служебную функцию D3DXCreateText создаст трехмерную сетку для заданного текста любым шрифтом TrueType. Если вам нужна 2D-версия, просто используйте минимальную экструзию или прямую ортогональную проекцию.

Если вам нужны явные контуры, вы можете либо (а) объединить этот подход с уже имеющимся контуром, (б) нарисовать текст дважды в немного другом масштабе (в зависимости от текущего уровня масштабирования) или (в) использовать шейдеры. чтобы нарисовать идеальный до пикселя контур.

Снимок экрана с точным изображением того, что вам нужно, может помочь. Все мои чертежи САПР имеют сплошной текст, без контуров.

person Paul-Jan    schedule 09.05.2011
comment
Direct3D 9 через SlimDX, однако я не могу найти в нем D3DXCreateText; Полагаю, они этого не раскрыли. - person Toby Wilson; 12.05.2011
comment
Согласно источнику, SlimDX предоставляет его через Mesh.CreateText (). - person Paul-Jan; 13.05.2011

Я создаю текстовые сетки с помощью D3DXCreateText (Win32, DX9). Они красиво вращаются. Однако они всегда кажутся одного и того же размера независимо от высоты шрифта, выбранного в DC.

Линии сетки в более мелких символах имеют псевдонимы и плохо смотрятся на видеокартах без мультисэмплинга.

person Pierre    schedule 28.11.2012