Funktion zum zeichnen von text auf dem Bildschirm mit C++/OpenGL/Glut schneller als glutBitmapCharacter
Ich brauche etwas muuuch schneller als glutBitmapCharacter(Schrift, text[i]). Es ist eine Verringerung performacne paar mal ! Ich brauche zur Anzeige von fps -, xyz-position etc. also nicht in 3D nur die Anzeige HUD.
Derzeit bin ich mit :
glRasterPos2f(x,y);
for (int i=0; i<text.size(); i++)
{
glutBitmapCharacter(font, text[i]);
}
Bin ich mit dieser Funktion :
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]);
}
}
Jedes Bild im DisplayFunction in der Zeichnung Abschnitt " HUD " (Aufruf 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);
}
Auch mit int zu string-Funktion :
string its(int i)
{
stringstream out;
out << i;
return out.str();
}
einige Tatsache über die Leistung (gemessen in FPS)
Ohne Aufruf DrawHUD Funktion ~ 3500
Mit Berufung DrawHUD Funktion ~ 3500 (vielleicht ein paar weniger fps)
Mit DrawHUD + 1 x GlutPrint ~ 3300
Mit DrawHUD + 2 x GlutPrint ~ 2400
Mit DrawHUD + 3 x GlutPrint ~ 1700
(zB. wenn ich meine 3 x GlutPrint ich meinte DrawHUD :
{
[...]
glutPrint(...);
glutPrint(...);
glutPrint(...);
[...]
}
)
Das ist nicht schön ... ich weiß, dass die Messung mit frame-rate ist nicht gut.
auch
wenn ich sagte :
glutBitmapCharacter(Schrift, text[i]);
in der Schleife, die in glutPrint es war ~3500 fps ... also ich bin SICHER, dass glutBitmapCharacter problem. So was benutzen Sie stattdessen, es 🙂 ?
Dann, was zu tun ist ?
- Ich bezweifle, glutBitmapCharacter ein Engpass. Bitte zeigen Sie den Kontext, in dem der code aufgerufen wird.
- Zeit zu geben, auf die GLUT. Deine Frage ist viel zu schlecht dokumentiert, um vorschlagen, eine bessere Bibliothek.
- Ich bin mir nicht sicher über die glut, aber ich weiß, GDI usw. es ist viel besser zu zeichnen in einen Puffer und ziehen Sie dann den Puffer.
- Das ist hier nicht der Fall. glutBitmapCharacter bietet nur wenig Komfort rund um glBitmap. glBitmap selbst ist Recht schnell, aber wenn Sie in der falschen Kontext auslösen können einige Auswirkungen auf die Leistung.
- check code (aktualisiert)
- Jetzt haben Sie genügend Informationen , richtig 🙂 ?
- keine Sorge. Wie gesagt, ich weiß nicht viel über gl.
- Uhh, also das, was ich stattdessen verwenden können von glutBitmapCharacter ??
- Hmm, das ist wirklich strage. Ich sehe keinen Grund, warum sollten Sie laufen in eine OpenGL-Synchronisation Punkt. Welche GPU nutzt du? Ist es ein AMD/ATI ein? Wenn dem so ist, dann wäre ich weniger überrascht. Jetzt anderen dir bereits gesagt, nicht zu verwenden, GLUT. Ich bin damit einverstanden, aber ich, dass glBitmap verursachen würde wie ein Tropfen habe ich nicht erwartet. Trotzdem, zum testen, ausprobieren glutStrokeCharacter, sieht nicht so schön, aber tut, ziehen Zeichen mit GL_LINES openglut.sourceforge.net/group__fonts.html
- Ich werde diese Weise, aber wenn glutStrokeCharacter text wird rückgängig gemacht, und wie im Spiegel reflektiert. Wie es zu lösen ist ?
- Von nicht sagen, OpenGL spiegeln die Projektion in die Y-Achse. Die Art und Weise, die Sie genannt glOrtho wird es drehen. tauschen Sie die oberen und unteren parameter und stellen Sie die Koordinaten der linken unteren (das ist, wo OpenGL Orte der screeen Herkunft).
glBitmap
ist lächerlich langsam. Das ist, warum jeder benutzt Texturierung zum zeichnen von bitmaps.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie Zweifel haben, gehen Sie zurück zu den Grundlagen: erstellen Sie Ihre eigenen (besseren) Zeichnung der Funktion. Erstellen Sie eine rechteckige textur von Zeichen und zeichnen zusammenhängenden quads (Dreieck, Streifen) auf dem Bildschirm mit der font-textur ausgewählt wird, wird ein Streifen pro Zeichenfolge.
Oben hält immer noch gut mit VBO ' s, wenn Sie wählen, um diesen Weg gehen. Die einzige wichtige Sache ist, um Puffer der schreibt so viel wie möglich, vielleicht durch hinzufügen von Sachen zu drucken, um den Bildschirm, um ein array von Sorten und schreiben Sie am Ende den Rahmen ziehen zur gleichen Zeit.