| netlib.narod.ru | < Назад | Оглавление | Далее > |
Функция D3DXCreateText создает трехмерную сетку, представляющую строку текста. На рис. 9.1 показана такая трехмерная сетка, отображаемая приложением FontMesh3D, которое находится в сопроводительных файлах к данной главе.

Рис. 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);
| netlib.narod.ru | < Назад | Оглавление | Далее > |