Main Menu

Text blitting

Started by Sloothword, May 30, 2006, 03:44:48 PM

Previous topic - Next topic

Sloothword

Hi

Ich suche eine Möglichkeit einen String zu blitten, ähnlich dem blitNumber() in der fps-Demo. Geht das überhaupt so einfach.
Billboarding und co scheidet ja aus, denk ich.

Danke schonmal

EgonOlsen

Das geht im Prinzip genauso. Entweder setzt du es als einzelne Blits aus einer Textur zusammen, die alle Buchstaben enthält (analog zu den numbers, in den Paradroidz-Quellen findest du in naroth.overlay.SystemOutOverlay ein Beispiel) oder du renderst den Text mit Java2D in ein Bild, machst daraus eine Textur und blittest die. Oder du malst direct in den FrameBuffer...das geht aber nur im Software-Renderer.

Sloothword

Danke
Ich nehme eine Textur und blitte die. Des funktioniert prima.

mogli

Quote from: "EgonOlsen"...oder du renderst den Text mit Java2D in ein Bild, machst daraus eine Textur und blittest die.


Hast du evtl. ein Beispiel wie man das macht! Ich bekomme es leider nicht hin!

Ich hab es folgendermassen probiert:

BufferedImage bf = new BufferedImage(128,128,BufferedImage.TYPE_INT_RGB);
Graphics2D g = bf.createGraphics();
g.drawString("test",20,40);
texMan.addTexture("test", new Texture(bf));



Eine Fehlermeldung erhalte ich nicht. Aber die Textur wird auf dem Objekt auch nicht angezeigt bzw das Objekt bleibt einfach schwarz. :(

EgonOlsen

Evtl. stimmen die Texturkoordinaten nicht? Ansonsten sieht der Code für mich ok aus. Das sollte so funktionieren. Füll mal den Hintergrund z.B. mit rot, um zu sehen, ob überhaupt was mit dieser Textur passiert.

P.S.: So kann man das für statische Texturen machen, aber nicht unbedingt für dynamische (d.h. solche, deren Inhalt sich öfter ändert. Dafür solltest du die Pixel aus dem erzeugten BufferedImage nehmen und mittels eines ITextureEffects in die Zieltextur kopieren)...ist effizienter.

mogli

...das mit der Hintergrundfarbe hab ich auch schon probiert. Passiert leider nichts. :(

Hmm, ok, dann werd ich das noch mal mit dem ITextureEffect probieren.
Mein Ziel ist es vor Türen eines Gebäudes so ne Art Namensschilder zu erzeugen. Dabei lese ich den Text aus ner Datenbank un will ihn dann auf ne Fläche "setzen"...

EgonOlsen

Hmm, also wenn ich den obigen Code irgendwo einfüge, dann bekomme ich auch das gewünschte Ergebnis. Da stimmt bei dir irgendwas anderes nicht... :?: