Когда я использую CreateFont (), чтобы получить шрифты строки, аргументы не используются

0

Я хочу использовать TrueType Fonts, чтобы нарисовать некоторую строку на экране с помощью OpenGL. Но когда я пытаюсь их сделать, что-то пойдет не так.

Шрифты имеют неправильный размер и положение. И аргументы, похоже, не используются.

Здесь Окно, которое я сделал с помощью OpenGL:

Изображение 174551

Это мои коды:

Вызовите функцию CreateFont.

hFont = CreateFont(10, 0, 0, 0, FW_LIGHT, 0, 0, 0, DEFAULT_CHARSET, OUT_TT_PRECIS, CLIP_LH_ANGLES, ANTIALIASED_QUALITY, DEFAULT_PITCH | FF_DONTCARE, L"Consolas");

glBindTexture(GL_TEXTURE_2D, NULL);
glColor3f(0.1f, 0.45f, 0.75f);

Я хочу, чтобы он отображался в позиции (0, 0).

glRasterPos2f(0, 0);

Некоторые переменные.

int length = lstrlen(text);
if (length < 1)
    return;
HDC hDC = wglGetCurrentDC();
GLYPHMETRICSFLOAT metric[1];
DWORD dwchar;
int list;

Нарисуйте каждый из шрифтов.

SelectObject(hDC, hFont);

for (int i = 0; i < length; i++)
{
    dwchar = text[i];
    list = glGenLists(1);
    wglUseFontOutlines(hDC, dwchar, 1, list, 0.01f, 0.0f, WGL_FONT_POLYGONS, metric);
    glCallList(list);
    glDeleteLists(list, 1);
}

glListBase(list);
DeleteObject(hFont);

Как мне делать дальше? Кажется, все в порядке.

Теги:
opengl
fonts

1 ответ

0
Лучший ответ

Контурные шрифты, созданные wglUseFontOutlines, не зависят от состояния растровой операции (glRasterPos), но генерируют много треугольников, которые преобразуются с помощью обычных матриц преобразования. Так что glTranslate, glScale и т.д. Применяются.

Обратите внимание, что:

  • wglUseFontOutlines создает набор отображаемых списков для каждого символа. Это неэффективно для создания и удаления отображаемых списков все время. Создавайте их только один раз, когда вам это нужно, а затем держите их для рисования.

  • списки отображения устарели и были удалены из ядра OpenGL-3 и позже

  • 0
    Так что же делать дальше? Как я могу рисовать шрифты без рисования списков? Я только что получил способ масштабирования шрифтов с помощью glScale3d ().
  • 0
    @PENGUINLIONG: связь между рисованием текста и OpenGL, ну, в общем, сложная. Тем не менее, самый простой способ - использовать растеризатор глифов в сочетании с механизмом компоновки для рисования в пиксельном буфере, загрузки его в текстуру OpenGL и рисования с использованием набора четырехугольников. К сожалению, это самый простой способ сделать это.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню