if (Position != position || Scale != scale || Origin != origin || Rotation != rotation)
{
scale = Scale;
origin = Origin;
rotation = Rotation;
position = Position;
transform = Matrix.CreateTranslation(new Vector3(-Position.X, -Position.Y, 0)) *
Matrix.CreateRotationZ(Rotation) *
Matrix.CreateScale(new Vector3(Scale, 1)) *
Matrix.CreateTranslation(new Vector3(-Origin, 0));
}
This is exactly what I use, it works fine. Rotates around the center, zooms, translates, everything you wish for ![]()
EDIT: Origin is just your screen center. so in a 800 * 600 window, it is 400,300 vector.