Tell me more ×
Game Development Stack Exchange is a question and answer site for professional and independent game developers. It's 100% free, no registration required.

In XNA I am using a spritebatch to render a board. I have created a camera class which can provide me a view and projection matrix. Currently I am supplying the view matrix to my sprite batch when I call begin.

I can get the view matrix to correctly move everything around and do some zooming in and out. My problem is that I want to zoom in on a specific point (for now the center of the screen) but currently zooming just zooms in on the coordinate 0,0.

Here is how I am constructing the view matrix;

        _ViewMatrix =
            Matrix.CreateTranslation(
                new Vector3(
                    (-_Position.X + _Width * _Zoom / 2),
                    (-_Position.Y + _Height * _Zoom / 2),
                    0) ) *
            Matrix.CreateScale(new Vector3(_Zoom, _Zoom, 1));

How could this be altered to make it scale correctly relative to the given point. Later I will probably want to zoom to the mouse position, but if someone has a simple example I'm sure I can work out how to adapt it.

Edit:

I have found the solution:

        _ViewMatrix =
            Matrix.CreateTranslation(-Position.X, -Position.Y, 0) *
            Matrix.CreateScale(_Zoom, _Zoom, 1.0f) *
            Matrix.CreateTranslation(_Width / 2, _Height / 2, 0.0f); 

This will cause the camera to zoom into the center of the screen instead of the top left corner. Although I have found the solution, the answer is still not complete; why is it that this _View matrix will zoom to the center of the camera while the one create in the other code snippet will zoom in on the top left corner.

share|improve this question
Not sure I understand your question exactly, but shouldn't you first scale and then translate? Why do you have '_Width * _Zoom / 2' in your code? – Grieverheart May 27 '12 at 3:46
I tried putting the scaling first, but got the same result. The '_Width * _Zoom / 2' part is to position the camera so that the center of the camera is over the point 0,0. – OriginalDaemon May 27 '12 at 13:21
Please, as you found the solution, post it as an answer to your own question. – Gustavo Maciel May 27 '12 at 18:26

Know someone who can answer? Share a link to this question via email, Google+, Twitter, or Facebook.

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Browse other questions tagged or ask your own question.