Textausgabe in OpenGL (vorher: OpenGL, GLUT, glutStrokeCharacter zeichnet nichts)
-
Hallo,
ich versuche im Moment Text in meiner OpenGL Anwendung anzuzeigen.
Da ich sowieso bereits GLUT verwende, dachte ich mir, ich verwende die GLUT Funktionen, wie hier beschrieben:
http://www-etud.iro.umontreal.ca/~clavetsi/api/glut/glutStrokeCharacter.html
Ich wollte den StrokeCharacter verwenden, da mir die BitmapCharacter nicht flexibel genug sind, was ihre Größe betrifft.Jetzt steht als Beispiel auf der Seite folgendes:
void output(GLfloat x, GLfloat y, char *text) { char *p; glPushMatrix(); glTranslatef(x, y, 0); for (p = text; *p; p++) glutStrokeCharacter(GLUT_STROKE_ROMAN, *p); glPopMatrix(); }
ich mache in de DisplayFunc also folgendes:
glLoadIdentity(); glPushMatrix(); glLineWidth(3.0f); // Ich erhöhe die Linienbreite, hilft aber auch nicht... glColor3d(0.0, 0.0, 0.0); // ich setze die Farbe auf schwarz, weil der Hintergrund weiß ist glTranslated(0.1, 0.1, 0.0); // ich nehme mal irgendeine Position an, zur Info, ich habe in der ReshapeFunc glOrtho(-1.0,2.2,-1.4,1.0,-1.0,1.0); glutStrokeCharacter(GLUT_STROKE_ROMAN, 'T'); // Ich will mir zum Test mal ein T anzeigen lassen glutStrokeCharacter(GLUT_STROKE_MONO_ROMAN, 48); // und auch eine Null glPopMatrix();
Allerdings bleibt das gesamte Fenster weiß...
Weiß jemand, was ich falsch mache?
Vielen Dank schon im Voraus,
MfG
-
Hmm, sieht ja nicht danach aus, als hätte jemand eine Lösung parat...
Nach (sehr) langem suchen in diversen Suchmaschinen fand ich immer noch keine Lösung, also aktualisiere ich mal meine Frage:
Zusätzlich zur Antwort obiger Fragestellung, suche ich jetzt eine Möglichkeit Text in OpenGL auszugeben die folgendes kann:
- Monospace Schriftart
- einfache Größenänderung der Texte
- die Größe der Exe sollte sich um maximal 1 - 1.5 MB vergrößern
Auch hier wieder vielen Dank im Voraus!
MfG
-
Ich hoffe Die Antwort interessiert hier noch, da sie sehr spät kommt.
> glOrtho(-1.0,2.2,-1.4,1.0,-1.0,1.0); <
Da liegt Dein Problem. glutStrokeCharacter sind ziemlich groß. Da ist klar warum Du nichts siehst.
Lösung1 für 2D:
glOrtho( 0, screenx, screeny-1, -1, -128, 128);Lösung2 für 3D:
vorher geeignet skalierenLösung3:
glutStrokeCharacter nicht verwenden und stattdessen auf Texturen zurückgreifen.
Dazu benötigst Du eine Textur für alle Schriftzeichen. Jedes Schriftzeichen ist
dann ein beklebtes Quad. So wird es meistens gemacht, da die Schrift skalierbar ist und auch nicht nur aus hässlichen Linien besteht.
-
Danke für deine Antwort.
Ich bin inzwischen zu freeglut umgestiegen.
Dort helfen einem die Entwickler sehr schnell weiterDas mit der Größe wurde mir auch bereits gesagt und so konnte ich das Problem lösen
Zur Lösung 3:
Das hatte ich mir zuvor auch überlegt, aber leider bin ich ein ziemlich (=absolut) schlechter Grafiker und mit der Gestaltung einer angenehm anzusehenden Schriftart, die keine 08/15 Schrift ist, überfordert.
Danke nochmal
MfG
-
Ich benutze auch freeglut für kurze Tests.
Als kleiner Tipp! Benutze doch den
Bitmap Font Builder,
der ist ganz brauchbar.Wenn es wirklich professionell aussehen soll, ist ein richtiger Grafiker unumgänglich.
-
Mich interessiert das Thema auch, da ich auch schon ein bisschen gesucht habe, aber ausser den Textbildern die gemapt werden nichts gefunden habe.
Gibt's da gar nichts OpenGL internes? (ich hab nix gefunden)
Warum kommt sowas nicht mal in den Standard? Ich mein, selbst wenn ich nur modelliere, will ich doch vielleicht mal die fps oder so ausgeben...
Thx
-
Was Internes gibt es da für OpenGL nicht. Die Funktion zur 2D-Textausgabe ist ja auch nicht so schwierig und die FPS kann man auch zur Not im Fenstertitel ausgeben.
Für GLUT gibt es dann ja die zwei Funktionen glutBitmapCharacter und glutStrokeCharacter.
Gruß
Trooper
-
Kenne diese glut Funktionen nicht, aber man kann mit wglUseFontBitmaps einen Font aus dem Device Context erstellen und in Display Lists ablegen lassen. Das ist die einzige mir bekannte OpenGL Funktion in diesem Zusammenhang. Ich persönlich rendere jedoch lieber Quads mit Font-Textur im Ortho-Modus. Die lassen sich natürlich nicht so schön skalieren, weil die Auflösung von der Textur abhängt, aber von der Performance her ist es wohl die beste Lösung.
-
wglUseFontBitmaps
... ist leider nur unter Windows möglich und keine OpenGL Funktion (sondern wgl).
Weiterhin besteht unter Windows noch die Möglichkeit GDI-Funktionen der WinAPI zu verwenden, davon halte ich aber nicht so viel.Trooper
-
Hier ein schönes Tutorial wies über die FreeType Library geht:
-
Vielleicht hilft dir auch dieses Programmbeispiel weiter:
http://www.spieleprogrammierung.net/2010/03/opengl-3-textausgabe-font-rendering.html
(die Textausgabe erfolgt hier GLSL shaderbasiert)