The view matrix depends on two values:
- Position of the camera (Integer for pixel placement)
- Scale (For res. independent rendering)
I develop the game on one resolution (virtual) and just up/downscale the whole matrix. Thus, I don’t need to adjust the game to several resolutions nor play with DPI stuff.
This is how I calculate the view and proj matrix.
//Get the "local" scale. This scalation depends on the virtual and actual resolution ratio. float localScaleX = ScreenWidth / VirtualWidth; float localScaleY = ScreenHeight / VirtualHeight; //Don't use float position values. Only int for exact PX coordinates on the screen. Vector2 position = new Vector2((int)TransformationComponent.Position.X, (int)TransformationComponent.Position.Y); //If the position changes, a matrix adjustment is required. ViewMatrix = Matrix.CreateTranslation(new Vector3(-position, 0.0f)) * Matrix.CreateTranslation(new Vector3(-Origin, 0.0f)) * Matrix.CreateRotationZ(TransformationComponent.Rotation) * Matrix.CreateScale(localScaleX * ScaleX, localScaleY * ScaleY, 1f) * Matrix.CreateTranslation(new Vector3(Origin, 0.0f)); //The projectMatrix also depends on scale and resolution properties. ProjectionMatrix = Matrix.CreateOrthographicOffCenter(0, ScreenWidth, ScreenHeight, 0, 0, 1f);
This is how I draw the map
MapRenderer.Draw(Map, CameraComponent.ViewMatrix, CameraComponent.ProjectionMatrix, ShaderComponent?.Shader ?? null, 0);
If I change the Windows size (thus the scalation changes) the texture bleeding does appear or disapear. (Some scaling factors are nice, some are not) I did try to round the Scale to 4,3,2 or even 1 comma digit. But still, the bleeding is existant.
Is there anything I am missing?
Thanks for your effort and time