Вам нужно получить точку в мировом пространстве (в противоположность пространству экрана) до и после масштабирования, а затем перевести с помощью дельты.
mouse_world_position = to_world_position(mouse_screen_position);
zoom();
mouse_world_position_new = to_world_position(mouse_screen_position);
translation += mouse_world_position_new - mouse_world_position;
Положение мыши находится в пространстве экрана, поэтому вы должны преобразовать его в мировое пространство.
Простое преобразование должно быть похоже на это:
world_position = screen_position / scale - translation