I'm making a game in C# and XNA 4.0. In some levels I need a camera matrix to make the level appear to scroll left/right. Additionally, I also need a scaling matrix to scale the graphics when the settings are used to change the window size. Both of my matrices are functional, but I'm currently calling them in the draw method like this:
if (scrollingLevel)
{
//Use the camera matrix to make the stage scroll
spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend, null, null, null, null, camera.transform);
}
else
{
//Use the scaling matrix to scale the graphics
spriteBatch.Begin(SpriteSortMode.Deferred, null, null, null, null, null, transform);
}
What I want is to apply both matrices at the same time if it is a scrolling level (scale the graphics based on the window size and then use the camera matrix to make the level scroll). However, simply adding and multiplying the matrices does not produce an accurate result (adding prevents the graphics from scaling to the exact amount that they should and multiplying makes the camera scroll inaccurately). How can I apply both of the matrices at once?
Simply multiply the matrices before passing to
spriteBatch.Begin
.Matrix multiplication allows the effects of both matrices appended into a single matrix. Note that this operation is not commutative, meaning that
A * B != B * A
.In your case, you should probably multiply scaling matrix with the camera matrix.