TTF Rendermode: Unterschied zwischen den Versionen
I0n0s (Diskussion | Beiträge) K (→Anwendung in OpenGL) |
(→Anwendung in OpenGL) |
||
Zeile 60: | Zeile 60: | ||
Eine Alternative ist das Blenden: | Eine Alternative ist das Blenden: | ||
<pascal> | <pascal> | ||
− | glBlendFunc(GL_SRC_ALPHA, | + | glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); |
glEnable(GL_BLEND); | glEnable(GL_BLEND); | ||
//Zeichnen der Textur | //Zeichnen der Textur | ||
Zeile 68: | Zeile 68: | ||
Ergebnis: | Ergebnis: | ||
[[Bild:TTF Blending.png|thumb|center|Anklicken für grosse Darstellung]] | [[Bild:TTF Blending.png|thumb|center|Anklicken für grosse Darstellung]] | ||
− | Die Schrift | + | Die Schrift wird an den Kanten leicht mit dem Hintergrund vermischt. Dadurch wirkt sie wesentlich ruhiger und lässt sich besser lesen. |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
=== Hinweis === | === Hinweis === |
Version vom 14. September 2007, 12:09 Uhr
Inhaltsverzeichnis
TTF_Rendermode
SDL_TTF kennt drei verschiedene Rendermodi:
Solid
Quick and Dirty
Erstellt eine 8-Bit palettierte Surface und rendert den gegebenen Text in schneller Qualität mit der gegebenen Schrift und Farbe. Der Pixelwert 0 ist der Colorkey, der den transparenten Hintergrund vorgibt, wenn es kopiert wird. Pixel- und Colormapwert 1 wird für die Vordergrundfarbe des Textes gesetzt. Dies erlaubt die Textfarbe zu ändern ohne den Text neuzurendern. Der Palettenindex 0 wird natürlich nicht gezeichnet, wenn es auf eine andere Surface kopiert wird, seitdem es ein Colorkey und somit die Transparenz ist, da die aktuelle Farbe 255 minus jeden der RGB Komponenten der Vordergrundfarbe ist.
Dies ist der schnellste Rendermodus von allen. Das Resultat hat keine Box um den Text, dafür ist der Text nicht glatt. Dieser Modus ist für FPS und andere schnell aktualisierende Textanzeigen geeignet.
Shaded
Slow and Nice, but with a Solid Box
Erstellt eine Surface mit einer 8-Bit Farbpalette und rendert den gegebenen Text in hoher Qualität mit der gegebenen Schrift und Farbe. Der 0 Pixelwert ist der Hintergrund, während die anderen Pixel variirende Farben zwischen der Vordergrundfarbe und Hintergrundfarbe sind. Dies resultiert in eine Box mit der Farbe des Hintergrundes um den Text in der Vordergrundfarbe. Der Text ist antialiased. Das Rendern ist langsamer als Solid, aber in ungefähr der selben Zeit wie Blended. Die resultierende Surface sollte sich so schnell wie eine 'Solid-Surface' kopieren lassen. Geeignet für netten Text wenn man zeitgleich mit der Box leben kann.
Blended
Slow Slow Slow, but Ultra Nice over another image
Erstellt eine 32-Bit ARGB Surface und rendert den gegebenen Text in hoher Qualität unter Benutzung von Alpha Blending. Dies resultiert in eine Surface mit Alpha Transparenz, sodass man keine solide farbige Box um den Text hat. Der Text ist antialiased. Das Render ist langsamer als Solid, aber in der selben Zeit wie im Shaded Modus. Die resultierende Surface lässt sich langsamer kopieren als bei Solid oder Shaded. Zu benutzen, wenn man hohe Qualität haben will und der Text sich nicht zu oft ändert.
Anwendung in OpenGL
Der Modus "Blended" liefert direkt die passende Textur, um eine schöne Schrift zu erzeugen.
var surface : PSDL_Surface; tex : GLUint; begin surface :=TTF_RenderText_Blended(font,'Fischer''s Frase fischt frische Forellen', color); //lädt die Daten aus der Surface in den Speicher: tex :=SDL_GL_LoadTexture(surface);
Zeichnen per Alphatest
Doch wie zeichnet man die Schrift den jetzt? Ich habe es bisher immer wie bei Sascha's BombermanFontUnit gemacht:
glEnable(GL_ALPHA_TEST); glAlphaFunc(GL_GREATER, 0.1); //Zeichnen der Textur glDisable(GL_ALPHA_TEST);
Das Resultat sieht dann so aus:
Im Prinzip also wie TTF_RenderText_Solid, was auch klar ist, wenn man sich anschaut was der Alphatest genau macht.
Zeichnen per Blenden
Eine Alternative ist das Blenden:
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glEnable(GL_BLEND); //Zeichnen der Textur glDisable(GL_BLEND);
Ergebnis:
Die Schrift wird an den Kanten leicht mit dem Hintergrund vermischt. Dadurch wirkt sie wesentlich ruhiger und lässt sich besser lesen.
Hinweis
Eine Demo-Anwendung zu SDL_TTF kann man im DGLSDK-SVN finden.
Siehe auch
TTF_RenderText_Solid, TTF_RenderText_Shaded, TTF_RenderText_Blended