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);
GraphicsDevice.SetRenderTarget(renderTarget);
GraphicsDevice.Clear(Color.Transparent);
Spritbatch.Begin();
//have to redo the ColorTexture
Spritbatch.Draw(ColorTexture.Create(GraphicsDevice, 1024, 1024, backgroundColor), Vector2.Zero, Color.White);
Spritbatch.DrawString(font, text, Vector2.Zero, textColor);
Spritbatch.End();
GraphicsDevice.SetRenderTarget(null);
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:
Is there a way to have the text centered only on one side?
Answer
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.)
No comments:
Post a Comment