Как расширить пространство мыши в оконном режиме OpenGL - PullRequest
0 голосов
/ 18 мая 2010

Как увеличить расстояние, на которое мышь может перемещаться в окне OpenGL?

Чего я хотел бы добиться, так это fps-подобного интерфейса, в котором курсор скрыт и вращение камеры не ограничивается мышью, которая остается внутри границ окна.

Ответы [ 4 ]

3 голосов
/ 18 мая 2010

Используйте glutWarpPointer, чтобы переместить мышь обратно в середину экрана после каждого движения мыши (это будет в glutMotionFunc, glutPassiveMotionFunc).Используйте glutsetcursor, чтобы изменить или скрыть то, как выглядит курсор.

1 голос
/ 19 мая 2010

В зависимости от того, какую платформу и инструменты вы используете, вы можете просто позволить мышке двигаться, затем рассчитать расстояние и затем переместить его обратно в центр экрана (или окна OpenGl).

int x,y;
GetMousePosition(&x,&y);
int deltaX = x-SCREEN_WIDTH/2;
int deltaY = y-SCREEN_WIDTH/2;
MoveMouse(SCREEN_WIDTH/2,SCREEN_HEIGHT/2);

Таким образом, вы можете легко перемещать мышь, удерживая ее в том же месте и тем самым избегая проблемы. Обратите внимание, что GetMousePosition и MoveMouse являются именами общих функций, поскольку это зависит от используемой вами ОС и / или библиотек.

1 голос
/ 18 мая 2010

Часть кода для этого, вероятно, должна быть специфичной для платформы.Например, в Windows вы обычно поворачиваете камеру, когда пользователь перетаскивает мышь.Вы бы справились с этим, захватив мышь и отвечая на WM_MOUSEMOVE сообщения, пока он захвачен.Пока мышь захвачена, вы продолжите получать сообщения о перемещении мыши, даже если позиция курсора выходит за границы вашего окна.

Похоже, что раскрутка уже достаточно хорошо накрыла X, поэтому я выиграл 'Повторите это здесь.

1 голос
/ 18 мая 2010

Это часто реализуется путем «деформации» мыши назад к центру экрана, в Linux. Здесь - это ветка форума об этом, использующая популярную библиотеку SDL для фактического чтения мышью.

В Windows изучите использование API-интерфейсов ввода более низкого уровня, таких как XInput.

...