2013-01-01 7 views
5

ich mit einem Bild beginnen werde:hässliche Schrift nach Ändern der Größe, OpenGL

enter image description here

Above Bild zeigt Text auf zwei verschiedene Arten erreicht, verwendet, um sowohl die gleiche Art von Schrift - Arial, fett, Größe 11 .

Die eine am unteren Rand wurde in Bildbearbeitungsprogramm erstellt, und die eine an der Spitze in meiner OpenGL-Anwendung. Um genauer zu sein, mit FTExtrudeFont aus ftgl Bibliothek:

font_ptr font(new FTExtrudeFont(filename.c_str())); 

Meine Frage ist, warum es so gezogen wird? Ich nehme an, der Grund dafür könnten unterschiedliche Größenänderungsalgorithmen sein, aber wenn ja, wie kann ich diese besser aussehende Schrift (die untere) in meiner OpenGL-Anwendung erreichen?

EDIT:

eine Schriftart zu machen, ich nenne nur diese eine Funktion:

font->Render(text,   // Text to be displayed 
      -1,   // Line length, which by default is left as -1 
      pos);   // Position in which to draw text 
+0

Benötigen Sie eine extrudierte Schrift? Können Sie eine normale Vektorschrift oder eine strukturierte Schriftart ausprobieren und sehen, ob Sie bessere Ergebnisse erzielen? – WildCrustacean

+0

@bde Ich versuchte texturierte Schrift, aber es ist antialiased, was in diesem Fall war nicht gut für mich, da ich scharfe, wahre schwarze Kontur brauche. –

Antwort

3

Das sieht aus wie etwas, das von Textursampling in OpenGL verursacht werden würde. Dies passiert, wenn die Textur, die Sie zeichnen (in diesem Fall eine Schriftart) nicht dieselbe Größe wie der Quad, auf den Sie zeichnen, ist.

Einfache Lösung: Stellen Sie sicher, dass die Texturgröße dem Bereich entspricht, der auf dem Bildschirm gezeichnet wird. Rendern Sie keine 14px-Schrift in einem 12px-Bereich, sondern verwenden Sie eine 12px-Schrift oder einen 14px-Bereich.

In Ihrer Frage erwähnen Sie, dass Ihre Schriftart 'Größe 11' ist. Ich bin mir nicht der Details der FTGL-Bibliothek bewusst, aber ich nehme an, dass es einen Aufruf gibt, der Ihnen die besten Dimensionen für eine bestimmte Zeichenkette angibt, die Sie zeichnen können. Verwenden Sie nicht Ihre eigene Mathematik, um diese zu berechnen, verwenden Sie die Bibliothek. Solange Sie die Dimensionen richtig verstanden haben, sollte das Problem, das Sie haben, nicht passieren.

+0

Danke für eine Antwort, aber ich denke, dass ich das nicht tun kann, da die einzige Funktion, die ich zum Rendern aufruft, ist (es stammt aus der FTGL-Bibliothek): font-> Render (text, -1, pos); Also ich glaube nicht, ich habe eine Möglichkeit, den Renderbereich zu ändern. –

+0

Wie ich schon sagte, weiß ich nicht viel über die FTGL-Bibliothek, aber ist es möglich, dass Sie vielleicht falsche Modelview/Projektions-Matrizen verwenden, die die Transformation von Scheitelpunkten zu Pixelpositionen falsch machen? * Etwas * verursacht die Abtastung der Textur (en). –

+0

Ich habe keine Ahnung, wie ich tatsächlich überprüfen könnte, ob ich "falsche Modelview Matrix" verwende, wie Sie sagen. Von dem, was ich sehe, scheint alles andere korrekt zu sein - ich benutze auch andere Texturen, um die Hintergründe der Gui-Komponenten zu zeichnen, und sie werden richtig angezeigt (ich meine, Pixel sind an den richtigen Stellen). –