MagicWolf писал(а):
Тем более без кода не разобраться.
Ну, код класса вот:
/******************************************************************/
// Класс для вывода 3D-текста.
#include <gl\gl.h> // заголовочный файл для библиотеки OpenGL32
class CText
{
public:
CText ()
{
}
~CText ()
{
KillFont ();
}
// Функция вывода текста в OpenGL
GLvoid DrawText (const char *Fmt, ...)
{
float fLength = 0; // Переменная для нахождения физической длины текста.
char Text [256]; // Здесь наша строка.
va_list pList; // Указатель на переменный список аргументов.
// Если нет текста.
if (Fmt == NULL)
return;
// Анализ строки на переменные
va_start(pList, Fmt);
// Конвертация символов в реальные коды.
vsprintf(Text, Fmt, pList);
// Результат сохраняется в text.
va_end(pList);
// Увеличение размера на ширину символа.
for (DWORD i = 0; i < (strlen (Text)); i++)//Цикл поиска размера строки
fLength += gmf [Text[i]].gmfCellIncX;
//Центровка на экране нашей строки.
glTranslatef (-fLength / 2.0f ,0.0f, 0.0f);
// Сохраняет в стеке значения битов списка отображения.
glPushAttrib(GL_LIST_BIT);
// Устанавливает базовый символ в 0.
glListBase(glunBase);
// Создает списки отображения текста.
glCallLists (GLsizei (strlen(Text)), GL_UNSIGNED_BYTE, Text);
// Восстанавливает значение Display List Bits.
glPopAttrib();
}
// Строим растровый шрифт.
GLvoid BuildFont(HDC hDC)
{
HFONT Font; // Идентификатор шрифта Windows.
glunBase = glGenLists(256); // массив для 256 букв.
Font = CreateFont(-12, // высота шрифта.
0, // ширина знакоместа.
0, // Угол перехода.
0, // Угол направления.
FW_BOLD, // Ширина шрифта.
FALSE, // Курсив .
FALSE, // Подчеркивание.
FALSE, // Перечеркивание.
ANSI_CHARSET, // Идентификатор кодировки.
OUT_TT_PRECIS, // Точность вывода.
CLIP_DEFAULT_PRECIS, // Точность отсечения.
ANTIALIASED_QUALITY, // Качество вывода.
FF_ROMAN | DEFAULT_PITCH, // Семейство и Шаг.
"Times New Roman CYR"); // Имя шрифта.
//Выбрать шрифт, созданный нами
SelectObject(hDC, Font);
wglUseFontOutlines (hDC, // Выбрать текущий контекст устройства (DC).
0, // Стартовый символ.
255, // Количество создаваемых списков отображения.
glunBase, // Стартовое значение списка отображения.
0.0f, // Отклонение от настоящего контура.
0.3f, // Толщина шрифта по оси Z.
WGL_FONT_POLYGONS, // Использовать полигоны, а не линии.
gmf); // буфер адреса для данных списка отображения.
}
private:
// Удаление шрифта
GLvoid KillFont(GLvoid)
{
// Удаление всех 256 списков отображения
glDeleteLists(glunBase, 256);
}
private:
GLuint glunBase; // База отображаемого списка для набора символов (добавлено).
GLYPHMETRICSFLOAT gmf[256]; // Массив с информацией о нашем шрифте.
private:
};
/******************************************************************/
Сегодня ещё раз поработал над программой и случайно заметил, что русский текст выводиться методом моего класса тогда, когда я запускаю прогу вне IDE Visual Studio, а когда в IDE - не работает. И ещё центрирование происходит неправильно при русском тексте