?

Log in

No account? Create an account
22 июл, 2006 @ 01:39 Эффективное создание своего фонта произвольного цвета под DirectX
Уважаемые профессионалы! Такой вопрос:

Пишу графический движок на Visual C++ и DirectX. Хочу сделать свою систему фонтов. В массиве поверхностей хранятся буковки шрифта. Казалось бы: бери и рисуй их на экран. А хочется, чтобы буковки можно было выводить разноцветные, чтобы разные NPC могли говорить разными цветами. Как это сделать поэффективнее, может, кто-нибудь посоветует?

Самый такой вариант, который приходит мне на ум:

1. Есть поверхность Буфер, поверхность Буква, поверхность Маска (заполнена цветом, в который будем окрашивать букву.)

2. Поверхности Буквы назначаем ключевой цвет тот, которым нарисована буква.

3. Накладываем Букву на Маску.

4. Результату назначаем ключевой цвет тот, которым нарисован фон буквы.

5. Накладываем на поверхность Буфера.

Насколько мне известно, цветовой ключ приемника-поверхности поддерживается не всеми видео-картами. Эмулирует ли это DirectX последних версий? Поэтому не хочу использовать цветовой ключ приемника, только источника.

В этом варианте мне не нравится, что нужно хранить поверхности-маски, закрашивать их и т.п. Есть у кого-нибудь идеи, как инициализировать фонты эффективнее?
topright:
From:black_wolf_ltd
Date:Сентябрь, 22, 2006 00:47 (UTC)

Привет.

(Ссылка)
Проблема О_октуальна, но ничего оригинально сказать не могу.

Сам где-то полгода назад делал один в один от того, как ты написал, с той лишь разницей, что маски делал с помощью SDL_TTF (ну и GL соответствеено =). Возни много было, плюс некоторые коворяд что SDL якобы некоторые *.ttf нихираниадыкватно отображает, но у меня все было хорошо. С учетом того, что есть много бесплатных ttf шрифтов и легости во всех смыслах SDL(_ttf), думаю, что проблем с тем, чтобы заюзать ее под dx у тебя возникнуть не должно.

Соответственно, будет вот такая универсальная жесть, да.
(Ответить) (Ветвь дискуссии)
From:ex_ex_darth
Date:Сентябрь, 22, 2006 04:32 (UTC)
(Ссылка)
Текстура с буквами белого цвета и альфа-каналом.
Выводить с альфа-тестом и альфа-блендингом.
Да, это все D3D
(Ответить) (Ветвь дискуссии)