Захват движения мыши в win32 / Opengl

0

На данный момент я просто использую сообщение WM_MOUSEMOVE, но он ограничивает движение мыши максимальным разрешением. Итак, что лучший способ захвата мыши с помощью Win32 (в окне OpenGl)? Я не хочу использовать freeglut или любую дополнительную библиотеку.

Теги:
opengl
winapi

3 ответа

2
Лучший ответ

Для игр и в реальном времени DirectInput очень подходит, он умеренно сложный в использовании.

Это не основной win32 api, winapi способ получения ввода - это GetCursorPos/SetCursorPos, управляемый вашим собственным циклом обновления, поэтому вы запрашиваете и перезагружаете свою собственную частоту.

Или SetCapture, а затем WM_MOUSEMOVE вы вызываете SetCursorPos. Пункт установки курсора pos - дать место для движения, чтобы вы могли получить дельта, сумму, которую курсор перемещал с момента последнего обновления, а затем вернули курсор в центр вашего окна.

0

Ваши лучшие ставки - либо использовать DirectInput (который может быть немного больно настроен), либо RawInput.

Существует довольно обширный пример, доступный на странице " Использование RawInput" (см. Пример 2).

0

Если вы хотите, чтобы иметь возможность захватывать события мыши после того, как мышь существовала в окне, вы можете захотеть просмотреть функцию SetCapture

Если ваша проблема заключается в том, что вы хотите сделать игру FPS и хотите, чтобы ваш персонаж мог вращаться в непрерывном движении, то вы хотите установить положение мыши в центр окна после каждого события перемещения мыши и обработать входные данные на основе на разницу между положением курсора при запуске события перемещения мыши и в центре экрана. Чтобы установить положение мыши, вы можете использовать функцию SetCursorPos.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню