2010-05-18 2 views
0

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

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

ответ

1

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

В Windows изучите использование API ввода нижнего уровня: s, например XInput.

+0

Cheers мат. Такое очевидное решение. Еще раз спасибо. – Ben

1

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

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

+0

Спасибо за дополнительные подробности :) – Ben

3

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

1

В зависимости от того, какую платформу и инструменты вы используете, вы можете просто перемещать мышь, а затем вычислять расстояние, а затем перемещать его в центре экрана (или в окне 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 являются универсальными именами функций, так как это зависит от используемой ОС и/или библиотек.

Смежные вопросы