- создать шрифт: CreateFont(.....);
- «привязать» контекст устройства: SelectObject(.....);
- преобразовать шрифт в полигоны: wglUseFontOutlines(.....).
Дело в том, что функция wglUseFontOutlines помещает шрифтовые полигоны в список отображения (для каждого символа получается как бы подпрограмма его вывода). По умолчанию OpenGL считает лицевыми те полигоны, рисование которых происходит ПО часовой стрелке — именно в таком порядке обходят вершины шрифтового полигона эти стандартные подпрограммки. А мне, рисуя флаг, было удобнее обходить прямоугольники, из которых он состоит, ПРОТИВ часовой стрелки. Чтобы OpenGL считал такие полигоны лицевыми, я при инициализации вызвал функцию glFrontFace(GL_CCW). Пока в сцене не было текста, она выглядела нормально, а когда направление рисования полигонов флага и текста не совпало, на изображении возникли серьезные артефакты. Стоило перед выводом текста поменять порядок обхода для лицевых полигонов: glFrontFace(GL_CW), а после — переназначить обратно: glFrontFace(GL_CCW), как изображение пришло в норму.
Вывод: не забывайте, что OpenGL очень чувствителен к порядку обхода вершин полигона.




