I am trying to put some text on a Model and I want it to be dynamic. Did some research and came up with drawing the text on the texture and then set it on the model. I use something like this:

public static Texture2D SpriteFontTextToTexture(SpriteFont font, string text, Color backgroundColor, Color textColor)
    Size = font.MeasureString(text);
    RenderTarget2D renderTarget = new RenderTarget2D(GraphicsDevice, (int)Size.X, (int)Size.Y);


    //have to redo the ColorTexture
    Spritbatch.Draw(ColorTexture.Create(GraphicsDevice, 1024, 1024, backgroundColor), Vector2.Zero, Color.White);
    Spritbatch.DrawString(font, text, Vector2.Zero, textColor);


    return renderTarget;

When I was working with primitives and not models everything worked fine because I set the texture exactly where I wanted but with the model (RoundedRect 3D button). It now looks like that:

Text on a cube

Is there a way to have the text centered only on one side?


You need to modify your model so that the UV (texture) coordinates place the texture at the correct location.

It's possible that setting the texture address mode to clamp may (sort-of) solve your issue. But this also depends on your model having the correct UV coordinates to make it work.

GraphicsDevice.SamplerStates[0] = SamplerState.LinearClamp;

(The default mode is wrap, which will cause texture coordinates outside the range of 0..1 to wrap around when addressing the texture. Clamp will duplicate the edge pixels outwards, outside that range.)

  • \$\begingroup\$ I don't really want to change my model in blender. If I use a cube without rounded-rect it works fine since the texture fits in the UV. I just need a rounded rect cube and a text-texture on it. Just like having a sticker on the cube. I'll try the linearClamp and get back to you. \$\endgroup\$
    – alecnash
    Oct 16 '12 at 12:04
  • 3
    \$\begingroup\$ A rather wild alternative would be to calculate texture coordinates in a custom shader, based on model-space vertex positions (ignoring the model's own UVs). That would save you modifying the model. But it is kind of crazy. \$\endgroup\$ Oct 16 '12 at 12:25
  • \$\begingroup\$ So you mean that my only alternative is that. I thought there would be an easier way. \$\endgroup\$
    – alecnash
    Oct 16 '12 at 12:32

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.