Text richtig einbauen
-
Hallo liebes C++ Forum!
Ich beginne gerade erst mit grafischen Sachen...
Hab erstmal ein simples Ping Pong Spiel geschrieben. Verwende SDL für die Events, Fenster etz. und OpenGL für die Ausgabe.Nun will ich einen Punktestand mittels FTGL hinzufügen. Bis zum Hello World Programm hats schon mal geklappt
Doch weiter komm ich auch nicht
Wenn ich:
font.Render(s.c_str());
bei jedem Schleifendurlauf verwende, ruckelt es. Liegt wohl daran, dass FTGL den Font auch wirklich jedesmal rendert.
Ich finde einfach keine Ordentliche Anleitung...
Also meine Bitte: Könnte mir Bitte jemand erklären, wie das genau funktioniert. Hab mir das so vorgestellt, dass ich quasi einmalig den Font in eine Textur rendere und diese dann halt jedes mal ausgeben. Und halt nur dann neu rendere, wenn sich der Punktestand ändert... meine Idee ist doch richtig, oder? Hab echt noch wenig Ahnung von Grafik
Freu mich über Hilfen, Anleitungen, verweise auf Tutorial...
EDIT:
So hab mich jetzt ein bisschen reingelesen.. ich brauch keine richtigen Fonts sonder Bitmap-Fonts...
Soll ich dazu dennoch FTGL verwenden (unterstützt soweit ich das verstanden habe ja auch bitmap-fonts) oder eine andere lib? Gibts dazu vielleicht ein gutes Tutorial?
Jannis
-
Ich kann dir nur sagen wie _ich_ es mache:
Ich verwende BMFont (http://www.angelcode.com/products/bmfont/) von angelcode um damit eine Textur mit allen Zeichen zu erstellen die ich verwenden möchte.
Dieses "Spritesheet" verwende ich dann um die Zeichen darzustellen, jedes als einzelnes Sprite bei dynamischem Text.Bei statischem Text rendere ich den Text erst mittels RenderToTexture (OpenGL) auf eine Textur und verwende dann diese einzelne Textur um den Text darzustellen.
Das reduziert die nötigen Quads / Sprites um eben die Anzahl der Zeichen des Textes auf 1 Sprite und damit 2 Polygone.Das wichtige in meinen Augen hierbei ist, dass ich alles in einem Aufruf rendere, das nennt man auch batching. Es wird nur ein Drawcall ausgeführt um den gesamten Text zu rendern.
Wäre jetzt halt gut zu erfahren welche Version von OpenGL du verwendest.
Ich verwende OpenGL 3.2, welches equivalent zu DirectX10 ist.Dynamischer Text ist eben Text der sich jeden Frame ändert, statischer Text ist bei mir Text der sich nie oder nur sehr selten ändert wie eben Menüs, Hilfetexte etc.
Das ist die Klasse die die Font-Datei einliest:
http://code.google.com/p/nightlight2d/source/browse/NightLightDLL/NLFont.cppRenderToTexture:
http://code.google.com/p/nightlight2d/source/browse/NightLightDLL/NLRenderToTexture.cppEventuell hilft das ja.
Ich würde dir von den Libs her übrigens zu SFML raten, wenn du schon fragst, aber an SDL ist nichts auszusetzen. Kannst gerne weiter verwenden.
BMFont möchte ich dir aber ans Herz legen, das ist richtig gut :).
-
Hey!
Erstmal danke für deine Antwort
BMFont läuft leider nicht bei mir. (Hab Linux und WINE meldet einen Fehler) ist aber nicht weiter schlimm, verwende jetzt: Codehead's Bitmap Font Generator (http://www.codehead.co.uk/cbfg/).
Hab OpenGL Version: 3.3.1....
Werde mir mal die beiden Klassen ansehen NightLight2d... ist das dein Projekt?
Also, danke nochmal. Ich schreib nochmal, wenn noch was unklar ist.
-
Ja, ist mein Projekt.
Und keine Ursache.
-
WOW, schnelle Antwort