| netlib.narod.ru | < Назад | Оглавление | Далее > |
Библиотека D3DX предоставляет интерфейс ID3DXFont, который можно использовать для отображения текста в Direct3D-приложениях. Этот интерфейс использует для отображения текста GDI и его применение может значительно уменьшить быстродействие приложения. Однако, поскольку ID3DXFont использует GDI, он поддерживает сложные шрифты и форматирование.
Для создания интерфейса ID3DXFont может использоваться функция D3DXCreateFontIndirect.
HRESULT D3DXCreateFontIndirect(
LPDIRECT3DDEVICE9 pDevice, // устройство, связанное со шрифтом
CONST LOGFONT* pLogFont, // структура LOGFONT, описывающая шрифт
LPD3DXFONT* ppFont // возвращает созданный шрифт
);
Приведенный ниже фрагмент кода показывает использование этой функции:
LOGFONT lf;
ZeroMemory(&lf, sizeof(LOGFONT));
lf.lfHeight = 25; // в логических единицах
lf.lfWidth = 12; // в логических единицах
lf.lfWeight = 500; // насыщенность,
// диапазон 0(тонкий) - 1000(жирный)
lf.lfItalic = false;
lf.lfUnderline = false;
lf.lfStrikeOut = false;
lf.lfCharSet = DEFAULT_CHARSET;
strcpy(lf.lfFaceName, "Times New Roman"); // гарнитура шрифта
ID3DXFont* font = 0;
D3DXCreateFontIndirect(Device, &lf, &font);
Обратите внимание, что сперва требуется заполнить структуру LOGFONT, которая описывает параметры создаваемого шрифта.
После того, как мы получили указатель на интерфейс ID3DXFont, рисование текста осуществляется простым вызовом метода ID3DXFont::DrawText.
INT ID3DXFont::DrawText(
LPCSTR pString,
INT Count,
LPRECT pRect,
DWORD Format,
D3DCOLOR Color
);
pString — Указатель на отображаемую строку текста.
Count — Количество отображаемых символов строки. Если строка завершается нулевым символом можно указать –1, чтобы строка отображалась вся.
pRect — Указатель на структуру RECT, определяющую область экрана в которой будет отображаться текст.
Format — Необязательные флаги, определяющие форматирование выводимого текста; их описание находится в документации к SDK.
Color — Цвет текста.
Вот пример использования метода:
Font->DrawText(
"Hello World", // Выводимая строка
-1, // Строка завершается нулевым символом
&rect, // Прямоугольная область для рисования строки
DT_TOP | DT_LEFT, // Рисуем в верхнем левом углу области
0xff000000); // Черный цвет
Примеры приложений к этой главе ID3DXFont и CFont вычисляют и отображают количество визуализируемых за секунду кадров (FPS). В этом разделе мы покажем как вычисляется FPS.
Сперва мы объявляем три глобальных переменных:
DWORD FrameCnt; // Количество выведенных кадров float TimeElapsed; // Прошедшее время float FPS; // Частота визуализации кадров
Мы вычисляем FPS каждую секунду; это дает нам достоверное среднее значение. Кроме того, мы храним вычисленное значение частоты кадров в течение одной секунды, что дает достаточно времени, чтобы прочитать его перед очередным изменением.
Итак, каждый кадр мы увеличиваем значение переменной FrameCnt и прибавляем к переменной TimeElapsed время, прошедшее с вывода предыдущего кадра:
FrameCnt++; TimeElapsed += timeDelta;
где timeDelta — это время, прошедшее между двумя кадрами.
После того, как пройдет одна секунда, мы вычисляем частоту кадров по следующей формуле:
FPS = (float)FrameCnt / TimeElapsed;
Затем мы обнуляем переменные FrameCnt и TimeElapsed и начинаем вычисление среднего значения частоты кадров для следующей секунды. Вот как выглядит весь код вместе:
void CalcFPS(float timeDelta)
{
FrameCnt++;
TimeElapsed += timeDelta;
if(TimeElapsed >= 1.0f)
{
FPS = (float)FrameCnt / TimeElapsed;
TimeElapsed = 0.0f;
FrameCnt = 0;
}
}
| netlib.narod.ru | < Назад | Оглавление | Далее > |