Вместо того, чтобы использовать glTranslate для перемещения всех объектов, вы должны попробовать glOrtho . Он принимает в качестве параметров нужные левые координаты, правые координаты, нижние координаты, верхние координаты и минимальную / максимальную глубину.
Например, если вы вызываете glOrtho (-5, 5, -2, 2, ...); Ваш экран покажет все точки, координаты которых находятся внутри прямоугольника, идущего от (-5,2) до (5, -2). Преимущество заключается в том, что вы можете легко настроить уровень масштабирования.
Если вы не умножаете ни на какую матрицу вида / проекции (что, как я предполагаю, имеет место), координаты экрана по умолчанию варьируются от (-1,1) до (1, -1).
Но в вашем проекте очень полезно управлять камерой. Вызовите это, прежде чем рисовать какой-либо объект вместо glTranslate:
float left = cameraX - zoomLevel * 2;
float right = cameraX + zoomLevel * 2;
float top = cameraY + zoomLevel * 2;
float bottom = cameraY - zoomLevel * 2;
glOrtho(left, right, bottom, top, -1.f, 1.f);
Обратите внимание, что cameraX и cameraY теперь представляют центр экрана.
Теперь, когда вы увеличиваете точку, вам просто нужно сделать что-то вроде этого:
cameraX += (cameraX - screenX) * 0.5f;
cameraY += (cameraY - screenY) * 0.5f;
zoomLevel += 0.5f;