#include
#include
#include
#include
#include
HDC hDC = NULL; // контекст устройства
HGLRC hRC = NULL; // контекст рендеринга
GLuint base;
GLYPHMETRICSFLOAT gmf[256]; // Массив с информацией о нашем шрифте
GLvoid BuildFont(GLvoid) // Построение нашего растрового шрифта
{ HFONT font; // Идентификатор шрифта Windows
base = glGenLists(256); // массив для 256 букв
font = CreateFont( -1, // высота шрифта
0, //Ширина знакоместа (если 0, то используется значение по умолчанию)
0, //Угол перехода
0, //Угол направления
0, //Ширина шрифта (0-1000)
FALSE, // Курсив
FALSE, // Подчеркивание
FALSE, // Перечеркивание
ANSI_CHARSET, //Идентификатор кодировки
OUT_TT_PRECIS, /* Точность вывода. Сообщает Windows что, если доступен больше чем один тип шрифта, то выбрать с тем же самым названием Truetype версию шрифта*/
CLIP_DEFAULT_PRECIS, /* Точность отсечения. Тип отсечения, который применяется, когда вывод символов идет вне области отсечения*/
ANTIALIASED_QUALITY, /* Качество вывода (PROOF, DRAFT, NONANTIALIASED, DEFAULT или ANTIALIASED)*/
FF_DONTCARE|DEFAULT_PITCH, // Семейство и Шаг
"Courier New"); // Имя шрифта
SelectObject(hDC, font); //Выбрать шрифт, созданный нами
wglUseFontOutlines( hDC, // Выбрать текущий контекст устройства (DC)
0, // Стартовый символ
256, // Количество создаваемых списков отображения
base, // Стартовое значение списка отображения
0.0f, //Отклонение от настоящего контура
0.2f, //Толщина шрифта по оси Z
WGL_FONT_POLYGONS, //Использовать полигоны, а не линии
gmf); //буфер адреса для данных списка отображения
}
GLvoid glPrint(const char *fmt, ...) // Функция вывода текста
{char text[256]; // Здесь наша строка
va_list ap; // Указатель на переменный список аргументов
if (fmt == NULL) // Если нет текста,
return; // ничего не делаем
va_start(ap, fmt); // Анализ строки на наличие переменных
vsprintf(text, fmt, ap); // Конвертация символов в значения
va_end(ap); // Результат сохраняется в text
glPushAttrib(GL_LIST_BIT); // Сохраняет в стеке значения битов списка отображения
glListBase(base); // Устанавливает базовый символ в 0
glCallLists(strlen(text), GL_UNSIGNED_BYTE, text); // Создает списки отображения текста
glPopAttrib(); // Восстанавливает значение
}
void L()
{glColor3f(0.1,0.1,0.1);
glPushMatrix();
glTranslatef(0.03,0.46,2);
glScalef(2,3,1);
glPrint("BLACK");
glPopMatrix();
glColor3f(0.89,0.89,0.89);
glPushMatrix();
// glRotatef(40,0,1,0);
glTranslatef(9,10,11);
glScalef(1,1.5,1);
glPrint("WHITE");
glPopMatrix();
glColor3f(0.8,0,0);
glPushMatrix();
// glRotatef(40,0,1,0);
glTranslatef(8,0,1.5);
glScalef(2,3,1);
glPrint("RED");
glPopMatrix();
glColor3f(0,0,0.8);
glPushMatrix();
// glRotatef(40,0,1,0);
glTranslatef(0,0,11);
glScalef(2,3,1);
glPrint("BLUE");
glPopMatrix();
glColor3f(0,0.8,0);
glPushMatrix();
// glRotatef(40,0,1,0);
glTranslatef(0,10.5,3);
glScalef(1,2,1);
glPrint("GREEN");
glPopMatrix();
glColor3f(0,1,1);
glPushMatrix();
// glRotatef(40,0,1,0);
glTranslatef(0,10.5,12);
glScalef(1,1.5,1);
glPrint("C y a n=white-red");
glPopMatrix();
glColor3f(1,1,0);
glPushMatrix();
// glRotatef(40,0,1,0);
glTranslatef(3,10.5,5);
glScalef(1,1.5,1);
glPrint("Yellow=white-blue");
glPopMatrix();
glColor3f(1,0,1);
glPushMatrix();
// glRotatef(40,0,1,0);
glTranslatef(1,0,9);
glScalef(1,2,1);
glPrint("Magenta=white-green");
glPopMatrix();
}
|