Não foi possível encontrar nenhum algoritmo de zoom

Por enquanto, estou ampliando assim:

float zoom = 1.1f;
camera.y *= zoom;
camera.x *= zoom;
tileSize *= zoom;

Mas parece realmente viciado e certamente estou fazendo algo não muito correto: quero que o zoom seja aplicado em um mapa de blocos relativamente ao centro da tela, mas apenas amplia a origem e abana a câmera um pouco. Não é o tipo de zoom que eu queria.

Eu prefiro uma resposta muito simple

Agradecemos antecipadamente e desculpe se é uma duplicat

EDIT: Aqui está como eu desenho o mapa:

for (int x = 0; x < map.size(); x++) {
        for (int y = 0; y < map.at(x).size(); y++) {
            DrawRect(x * round(tileSize) - camera.x, y * round(tileSize) - camera.y, round(tileSize), round(tileSize), WHITE);
        }
}