繁体   English   中英

使用C ++ / OpenGL / Glut在屏幕上绘制文本的功能比glutBitmapCharacter更快

[英]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();
}

有关性能的一些事实(以FPS衡量)

如果不调用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM