2015-02-16 6 views
1

Я сделал тест, подключив ID3DXFont :: DrawText() в игре с помощью D3D9 (я тестировал на LOTRO, первые экраны загрузки и панель символов в начале после входа на сервер), но он никогда не вызывается (крючок работает, я тестировал, используя этот API для рисования текста), хотя многие тексты рисуются на экране.Как нарисовать текст в D3D9 отдельно ID3DXFont :: DrawText?

Какими могут быть другие методы для рисования текста в D3D9?

Спасибо.

+0

Нет необходимости, чтобы приложение Direct3D 9 использовало D3DX. D3DX является полностью необязательным - и эти дни устарели - библиотека. –

ответ

1

В конечном итоге существует только один способ визуализации текста с использованием Direct3D 9, и это путем рисования текстуры, содержащей текст, с использованием одного из методов IDirect3D9::Draw*. Вот как ID3DXFont рисует текст под капотом. Для текста, который никогда не изменяется (например, «Игра поверх»), может использоваться статическая текстура, содержащая текст. Для динамического текста (например, имя игрока) текст может быть преобразован в динамическую текстуру с помощью процессора (возможно, с использованием GDI), или отдельные буквы могут быть выбраны из статической текстуры, содержащей полный алфавит символов.

Это означает, что делать все, что вы пытаетесь сделать, будет нелегко. В Direct3D 9 текст рисуется так же, как и все остальное. Если вы перехватываете только призывы к вызову, вы не будете знать, воспроизводит ли игра текст или часть сцены. Если вы перехватите все вызовы Direct3D 9 и отслеживаете текущее состояние устройства, вы должны уметь отличать игру от визуализации элементов пользовательского интерфейса от момента рендеринга сцены, но вы все равно не будете знать, какой текст (если есть) если вы не смотрите на текстуру. В общем случае это означает, что вам понадобится OCR (оптическое распознавание символов) текстуры.

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