Я хочу использовать TrueType Fonts, чтобы нарисовать некоторую строку на экране с помощью OpenGL. Но когда я пытаюсь их сделать, что-то пойдет не так.
Шрифты имеют неправильный размер и положение. И аргументы, похоже, не используются.
Здесь Окно, которое я сделал с помощью OpenGL:
Это мои коды:
Вызовите функцию 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);
Как мне делать дальше? Кажется, все в порядке.
Контурные шрифты, созданные wglUseFontOutlines
, не зависят от состояния растровой операции (glRasterPos), но генерируют много треугольников, которые преобразуются с помощью обычных матриц преобразования. Так что glTranslate, glScale и т.д. Применяются.
Обратите внимание, что:
wglUseFontOutlines создает набор отображаемых списков для каждого символа. Это неэффективно для создания и удаления отображаемых списков все время. Создавайте их только один раз, когда вам это нужно, а затем держите их для рисования.
списки отображения устарели и были удалены из ядра OpenGL-3 и позже