Das Rendern von Text über wgluseoutlines funktioniert einwandfrei, allerdings habe ich nur Kantenglättung, wenn ich den Font als Wireframe aus Linien erstelle, aber nicht so wie ich es brauche aus Polygonen. Dann siehts total eckig aus, siehe Bild.
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Na ja. Das sind Polygone. Die Kanten von Polygonen werden natürlich nur sinnvoll geglättet, wenn du Antialiasing aktivierst. Also entweder im Treiber oder bei der Erstellung des Kontexes.
Dazu solltest du dir mal folgendes Thema anschauen. Das das als Linien geglättet wird darauf solltest du dich nicht verlassen. Sobald du eine Hardware findest die das nicht kann ist zappenduster.
Und solltest du das nicht wollen wirst du wohl um TexturFonts nicht drumherum kommen. Weil du nur mit diesen weiche Kanten hinbekommst. Die "alten" Möglichkeiten können das nur bedingt.
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Ja das ewig missverstandene Mysterium der Texturfonts. Es gibt zwar 1-3 Lösungen aber so wirklich berauschend sind die alle nicht. Ich bastel da gerade an etwas und wenn ichs nicht versaue dann ist das sogar benutzbar. Aber dauert wohl noch etwas.
Derzeit bleibt dir nur anderes übrig. Und das schlimmste ist, dass Windows die Schriften leider nicht immer glättet, weswegen du bei ungünstigen Schriften bis zu großen Schriftgrößen keine Glättung hast.
Mars hatte irgendwann mal einen Generator geschrieben der praktischerweise gleich koordinaten mit erzeugt hatte. Habe aber keinen Link zur Hand. Ist irgendwo in Offtopic und 1-2 Jahre her.
Du solltest dir aber mal das Kapitel Schrift aus Texturen aus dem Artikel Text ausgeben anschauen. Dort wird auch auf den Artikel Tool verlinkt. In diesem findest du unter "2D/Texturen-Tools" den Bitmap Font Builder. Für diesen gibt es aber leider keinen Header. Also musst du das selber berechnen. Da die Buchstaben in einem Raster angeordnet sind sollte das halbwegs erträglich sein.
Ich hatte früher auch mal so etwas versucht. In diesem Beitrag kannst du sehen wie man es verwenden kann. Ein Stück oberhalb sind links auf die Quellen aber diese funktionieren nicht mehr. Du kannst aber hier die glText und die glBitmap downloaden. Der Code der glBitmap hat sich aber verändert weswegen du
Code:
Font.Texture.BuildMipMaps:=False;// No MipMaps
Font.Texture.TextureFormat:= tf32Bit;// 32 Bits color Delpth. Also could be tf16. But tfCompressed could have bad quality with some fonts
durch
Code:
Font.Texture.MipMap:= mmNone;// No MipMaps
ersetzen musst. Die Zweite Zeite ist eigentlich überflüssig.
Das Tool zum Erstellen der Fonts kannst du hier finden. Das heißt FontCreation und gibt es als Binarys bzw auch als Sourcen. Aber erwarte bitte keine Wunder. Die Texte die dabei entstehen sind alles andere als Gut.
Normale Texturefonts würde ich als Alpha-Only Tex erstellen, und mit normalem alphablending rendern. Geht solange die orginalschriftgröße mit der gerenderten identisch ist, und du keine besonderen ansprüche an die Zeichenabstände hast gut und einfach.
Vielen Dank für die umfangreiche Antwort, Lossy eX! Da ist einiges bei gewesen was ich verwenden konnte. Habe es im Moment genauso gelöst wie es The Winner vorgeschlagen hat (denke ich jedenfalls: weißes bild und nur im Alpha-Kanal die Schrift erstellt. Richtig so?). Funktioniert ganz gut soweit. Jetzt muss ich nur noch für 4 verschiedene Schriftgrößen Texturen erstellen. Und da ich immer die gleiche Schriftart verwende werde ich wohl nicht auf dein Projekt (wow! sieht echt klasse aus!) warten.
Ich denke meine Frage ist beantwortet. Vielen Dank!
Mars hatte irgendwann mal einen Generator geschrieben der praktischerweise gleich koordinaten mit erzeugt hatte. Habe aber keinen Link zur Hand. Ist irgendwo in Offtopic und 1-2 Jahre her.
Ich selbst nutze das Tool von Mars auch, und bin sehr zufrieden. Da Mars auch gleich Routinen veröffentlicht hat, mit denen man auf die mitgelieferten Koordinaten der Schriftzeichen zugreifen kann, hat man sehr schnell brauchbare Ergebnisse erzielen. Wie das am Ende aussehen kann, siehst Du in dem Thread selber, oder "in Aktion" in meinem aktuellen Projekt Memory (http://www.delphigl.com/forum/viewtopic.php?t=6297). Wobei dort fast schon stark weichgezeichnet wird, was man aber über Nachbearbeitung des Bitmaps mit Blur und über das Blending selbst steuern kann.
Grüße, DNA
_________________ Heute code ich, morgen debug ich, und übermorgen caste ich die Königin auf int.
http://www.2ndmoon.de
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Ich hatte Probleme mit den Fonts von Mars. Vermutlich lags nicht an Mars, aber die Schrift im PBall Manager 2 sah einfach grausich aus.
Wenn es nen 3. Teil geben sollte hätte ich schon ne bessere alternative parat. Ich hab nen GL_TTF_Loader (Java) geschrieben. Dort kann ich aus einem beliebigen TTF Font zur laufzeit ne Textur machen, die ich dann benutzen kann. Probleme gibts nur bei "Zwischengrößen". Da tanzen die Buchstaben manchmal in der verticalen aus der Reihe.
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Registriert: Di Okt 03, 2006 14:07 Beiträge: 1277 Wohnort: Wien
Flash schrieb:
Zitat:
Probleme gibts nur bei "Zwischengrößen". Da tanzen die Buchstaben manchmal in der verticalen aus der Reihe.
Ich hatte mit meiner FreeType Font genau das gleiche Problem. Geholfen haben mir die Tipps auf http://gpwiki.org/index.php/OpenGL:Tutorials:Font_System, und zwar was die Höhe der Buchstaben betrifft der Abschnitt "// Set the font size" betreffend den ascend und descend (befindet sich mitten in dem Quellcode drin).
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Ascent und Descent sind Fontabhängig. Ändern sich als nicht von Zeichen zu Zeichen. Du musst dir also von den verwendeten Fonts das maximale Ascent suchen und dann weißt du wo sich die Baseline befindet. Mit der kannst/musst du dann die Texte an einer Linie ausrichten.
Allerdings gibt es bei SDL_TTF noch etwas anderes. Wenn du dir ein Glyph mit TTF_RenderGlyph_* geben lässt, dann beinhaltet dieses keinen Rand mehr. Mit TTF_RenderUNICODE_* bekommst du allerdings ein Bild was immer so Hoch ist wie die Zeile hoch wäre. Mit RenderGlyph müsstest du dir aus der Metric den MinY Wert holen und mit diesem erst einmal die Position der Baseline in dem Bild berechnen.
Registriert: Di Okt 03, 2006 14:07 Beiträge: 1277 Wohnort: Wien
@Flash: zu diesem Quellcode kann ich nichts sagen, weil ich das ganz anders mache.
@Lossy: Ich lasse mir von FreeType die Glyphs in ein Bitmap rendern, und diese verflixten Bitmaps sind alle verschieden groß. Ohne Ascend/Descend (wie in dem Tutorial angegeben) waren meine Buchstabenreihen wie Berg und Tal.
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Traude: Genau das meine ich ja auch. Und so muss ich das ja auch machen. Na ja. Und noch ein paar Kleinigkeiten mehr.
Flash: Also ich kenne mich mit Java nicht so super aus. Bzw. ist eher das Problem, dass ich keine Ahnung welches Objekt dort was darstellt. Aber das TextLayout hat ein getAscent. Mit dem sollte deine Zeichen an einer Linie ausrichten können. Und typischerweise ist die Breite des Buchstabend in getAdvance enthalten. Da einige Zeichen wie ein i oder l etwas mehr Abstand haben sollten als ein a. Von daher musst du nicht um jeden Buchstaben einen 2 Pixel breiten Rand ziehen.
Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.