Amaranth
Amaranth

Reputation: 2491

XNA - Drawing zoomed 2D sprites

I have a tile based game. Each tile texture is loaded and then I draw each one next to the other, forming a continuous background. I actually followed this tutorial for the xml files.

http://www.xnadevelopment.com/tutorials/looksleveltome/looksleveltome.shtml

The sources of the textures are 50x50.

However, it works only it the scale is 1 (or lower), if the scale is greater

The results : Normal size (50 pixel and scale 1) http://imageshack.us/photo/my-images/525/smallzp.jpg/

Larger size (Zoomed or 100 pixel in xml file) http://imageshack.us/photo/my-images/577/largeki.jpg/

We can see there are lines between the tiles, which are not in the texture. It's actually not so bad here, but in my game tileset, that's what it does : http://imageshack.us/photo/my-images/687/zoomedsize.png/

The same effect is present whether I increase the tile size in the xml file, change the scale when drawing or use my camera to zoom.

//zoom code
public Matrix GetTransformation()
{
    return
       Matrix.CreateTranslation(new Vector3(-_pos.X, -_pos.Y, 0)) *
       Matrix.CreateRotationZ(Rotation) *
       Matrix.CreateScale(new Vector3(Zoom, Zoom, 1)) *
       Matrix.CreateTranslation(new Vector3(_device.Viewport.Width * 0.5f, _device.Viewport.Height * 0.5f, 0));
}

//draw
_spriteBatch.Begin(SpriteSortMode.Immediate, 
  BlendState.AlphaBlend, null, null, null, null,
  _camera.GetTransformation());

//for each tile
theSpriteBatch.Draw(mSpriteTexture, Position, Source, 
  Color.Lerp(Color.White, Color.Transparent, mAlphaValue),
  mRotation, new Vector2(mSource.Width / 2, mSource.Height / 2),
  Scale, SpriteEffects.None, mDepth);

Is there a reason for this? A way to fix it to have a continuous texture when zoomed?

Upvotes: 0

Views: 1006

Answers (1)

Blau
Blau

Reputation: 5762

The problem is in your sampler state, the gpu is trying to sample colors near the point to interpolate them.

Use SamplerState.PointClamp in your spriteBatch.Begin() and it will be fixed.

Upvotes: 1

Related Questions