Я бы рекомендовал вместо этого использовать готовый двигатель, такой как OGRE 3D , но если вы действительно хотите заново изобрести колесо, вот как ...
Во всех известных мне случаях игры PC FPS «ловят» указатель, регистрируя обратный вызов движения мыши, отмечая относительное движение, а затем деформируя указатель обратно в центр окна.
Вот некоторый код, который я написал для добавления ввода мышью в образец таблицы для пинг-понга в OpenGL с курсом C ++ год или два назад:
void resetPointer() {
glutWarpPointer(TABLE_X/2, TABLE_Y/2);
lastMousePos = TABLE_Y/2;
}
void mouseFunc(int sx, int sy) {
if (!started) { return; }
int vertMotion = lastMousePos - sy;
lastMousePos = sy;
player1.move(vertMotion);
// Keep the pointer from leaving the window.
if (fabs(TABLE_X/2 - sx) > 25 || fabs(TABLE_Y/2 - sy) > 25) {
resetPointer();
}
}
// This goes in with your "start new game" code if you want a menu
resetPointer();
glutSetCursor(GLUT_CURSOR_NONE);
glutPassiveMotionFunc(mouseFunc);
Он отслеживает только вертикальное движение, но добавление горизонтального тривиально.