在OpenGL中,有许多方法可以在屏幕上绘制文本。我想选择最好的,主要是最有效的方式。据我所知,你可以使用例如其中之一:
位图纹理
BMPbase = glGenLists(256);
for(int loop = 0; loop < 256; loop++)
{
cx = float(loop % 16) / 16.0f;
cy = float(loop / 16) / 16.0f;
glNewList(BMPbase + loop, GL_COMPILE);
glBegin(GL_QUADS);
glTexCoord2f(cx, 1 - cy); glVertex2i(0, 0);
glTexCoord2f(cx + 0.0625f, 1 - cy); glVertex2i(Size, 0);
glTexCoord2f(cx + 0.0625f, 1 - cy - 0.0625f); glVertex2i(Size, Size);
glTexCoord2f(cx, 1 - cy - 0.0625f); glVertex2i(0, Size);
glEnd();
glTranslated(10, 0, 0);
glEndList();
}
FreeType字体:
glPushAttrib(GL_LIST_BIT);
glListBase(base - 32);
glCallLists(strlen(text), GL_UNSIGNED_BYTE, text);
glPopAttrib();
大纲字体:
Font = CreateFont(12,
0,
0,
0,
FW_BOLD,
FALSE,
FALSE,
FALSE,
ANSI_CHARSET,
OUT_TT_PRECIS,
CLIP_DEFAULT_PRECIS,
ANTIALIASED_QUALITY,
FF_DONTCARE|DEFAULT_PITCH,
"Times New Roman");
wglUseFontOutlines(hdc,
0,
255,
base,
0.0f,
0.5f,
WGL_FONT_POLYGONS,
GMF);
目前我使用位图字体,但问题是,我绘制的文字越多,我拥有的FPS就越少。如果我画一行10个字符或5行10个字符,这是非常重要的。
哪种是性能和质量最好的字体技术? 我知道,我可以以某种方式使用着色器绘制字体,这似乎是最好和最有效的解决方案,因为字体将存储在GPU内存中,但我不知道,我怎么能使用(GLSL)着色器绘制字体。 / p>
或者有更好的方法吗?