Трехмерный текст, созданный функцией DXCreateText
Рисунок 9.1. Трехмерный текст, созданный функцией D3DXCreateText
Прототип функции выглядит следующим образом:
HRESULT D3DXCreateText( LPDIRECT3DDEVICE9 pDevice, HDC hDC, LPCTSTR pText, FLOAT Deviation, FLOAT Extrusion, LPD3DXMESH* ppMesh, LPD3DXBUFFER* ppAdjacency, LPGLYPHMETRICSFLOAT pGlyphMetrics );
В случае успешного завершения функция возвращает D3D_OK.
pDevice — Устройство, связанное с сеткой.
hDC — Дескриптор контекста устройства, содержащего описание шрифта, которое будет использоваться для генерации сетки.
pText — Указатель на завершающуюся нулем строку с текстом, для которого будет создаваться сетка.
Deviation — Максимальное хордальное отклонение от контуров шрифта TrueType. Значение должно быть больше или равно нулю. Когда значение равно нулю, хордальное отклонение будет равно одной проектной единице оригинального шрифта.
Extrusion — Глубина шрифта, измеряемая вдоль отрицательного направления оси Z.
ppMesh — Возвращает созданную сетку.
ppAdjacency — Возвращает информацию о смежности для созданной сетки. Если она вам не нужна, укажите в данном параметре null.
pGlyphMetrics — Указатель на массив структур LPGLYPHMETRICSFLOAT, содержащий данные метрик глифов. Каждый элемент массива содержит информацию о местоположении и ориентации соответствующего глифа в строке. Количество элементов массива должно соответствовать количеству символов в строке. Если вы не хотите связываться с метриками глифов, просто укажите 0.
Следующий фрагмент кода показывает как создать изображающую текст трехмерную сетку с помощью рассматриваемой функции.
// Получение дескриптора контекста устройства HDC hdc = CreateCompatibleDC(0);
// Заполнение структуры LOGFONT, описывающей свойства шрифта 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"); // гарнитура шрифта
// Создаем шрифт и выбираем его в контексте устройства HFONT hFont; HFONT hFontOld; hFont = CreateFontIndirect(&lf); hFontOld = (HFONT)SelectObject(hdc, hFont);
// Создаем представляющую текст трехмерную сетку ID3DXMesh* Text = 0; D3DXCreateText(_device, hdc, "Direct3D", 0.001f, 0.4f, &Text, 0, 0);
// Восстанавливаем бывший до этого шрифт и освобождаем ресурсы SelectObject(hdc, hFontOld); DeleteObject(hFont); DeleteDC(hdc);
Теперь вы можете визуализировать трехмерную сетку просто вызвав метод сетки DrawSubset:
Text->DrawSubset(0);