В Win32 вы можете сделать следующее, чтобы получить состояние ключа:
#define KEY_DOWN(vKey) (GetAsyncKeyState(vKey) & 0x8000) ? true : false
#define KEY_UP(vKey) (GetAsyncKeyState(vKey) & 0x8000) ? false: true
vKey - это целое число, представляющее значение ASCII ключей.
Когда вы знаете, что нажата клавиша «зум», вы можете сделать перевод
glPushMatrix();
glTranslate3f(5.0,0.0,0.0); // moves the camera +5 down the x-axis
...
glPopMatrix();
Реально вы бы использовали более сложный код для масштабирования, поскольку это, конечно, зависит от направления просмотра. Также у вас будет более сложная функция состояния клавиш, которая будет находиться в вашем цикле сообщений и содержать состояние всех клавиш, которые будет использовать ваше приложение, включая положение мыши и кнопки мыши.