![](/img/trans.png)
[英]using glutBitmapCharacter() to draw text closing opengl program
[英]Function to draw text on screen using C++/OpenGL/Glut faster than glutBitmapCharacter
我需要比glutBitmapCharacter(font,text [i])快得多的东西。 减少性能几次! 我需要显示fps,xyz位置等,因此在3D中不仅仅显示HUD。
目前,我正在使用:
glRasterPos2f(x,y);
for (int i=0; i<text.size(); i++)
{
glutBitmapCharacter(font, text[i]);
}
我正在使用此功能:
void glutPrint(float x, float y, LPVOID font, string text)
{
glRasterPos2f(x,y);
for (int i=0; i<text.size(); i++)
{
glutBitmapCharacter(font, text[i]);
}
}
绘制HUD部分的DisplayFunction中的每一帧(调用DrawHUD()):
void DrawHUD (void)
{
glMatrixMode(GL_PROJECTION);
glPushMatrix();
glLoadIdentity();
glOrtho(0.0, windowWidth, windowHeight, 0.0, -1.0, 10.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glClear(GL_DEPTH_BUFFER_BIT);
glColor3f(0.2f,0.2f,0.2f);
glutPrint(2,10,glutFonts[4],its(sfps)+" fps; "+its(todrawquads)+" quads drawing; ");
glMatrixMode(GL_PROJECTION);
glPopMatrix();
glMatrixMode(GL_MODELVIEW);
}
还使用int来字符串函数:
string its(int i)
{
stringstream out;
out << i;
return out.str();
}
如果不调用DrawHUD功能〜3500
随着呼叫DrawHUD功能〜3500(也许少一些FPS)
与DrawHUD + 1×GlutPrint〜3300
与DrawHUD + 2×GlutPrint〜2400
与DrawHUD + 3×GlutPrint〜1700
(例如,当我的意思是在DrawHUD中使用3 x GlutPrint时:
{
[...]
glutPrint(...);
glutPrint(...);
glutPrint(...);
[...]
}
)
不好。我知道使用帧速率进行测量不是很好。
当我评论:
glutBitmapCharacter(font,text [i]);
在glutPrint循环有〜3500 fps的......所以我敢肯定 ,glutBitmapCharacter是问题。 那怎么用呢:)?
那该怎么办呢?
如有疑问,请回到基础知识:创建自己的(更好的)绘图功能。 制作一个矩形的字符纹理,并在屏幕上绘制连续的四边形(三角形带),并选择字体纹理,每个字符串一带。
如果您选择沿着那条路线前进,那么上述内容仍然适用于VBO。 唯一重要的事情是尽可能多地缓冲写入,可能是通过将要打印的内容添加到屏幕上的各种数组中,然后在绘制帧的末尾同时将它们写出。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.