Squeak.ru - шаблоны программирования

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

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

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

18.05.2010

Ответы:


1

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

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

18.05.2010
  • Здоровья, приятель. Такое очевидное решение. Еще раз спасибо. 18.05.2010

  • 2

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

    18.05.2010

    3

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

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

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

  • 4

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

    18.05.2010
    Новые материалы

    Угловая структура архитектуры
    Обратите внимание, что эта статья устарела, я решил создать новую с лучшей структурой и с учетом автономных компонентов: https://medium.com/@marekpanti/angular-standalone-architecture-b645edd0d54a..

    «Данные, которые большинство людей используют для обучения своих моделей искусственного интеллекта, поставляются со встроенным…
    Первоначально опубликовано HalkTalks: https://hacktown.com.br/blog/blog/os-dados-que-a-maioria-das-pessoas-usa-para-treinar-seus-modelos-de-inteligencia-artificial- ja-vem-com-um-vies-embutido/..

    Сильный ИИ против слабого ИИ: различия парадигм искусственного интеллекта
    В последние годы изучению и развитию искусственного интеллекта (ИИ) уделяется большое внимание и прогресс. Сильный ИИ и Слабый ИИ — две основные парадигмы в области искусственного интеллекта...

    Правильный способ добавить Firebase в ваш проект React с помощью React Hooks
    React + Firebase - это мощная комбинация для быстрого и безопасного создания приложений, от проверки концепции до массового производства. Раньше (знаете, несколько месяцев назад) добавление..

    Создайте API с помощью Python FastAPI
    Создание API с помощью Python становится очень простым при использовании пакета FastAPI. После установки и импорта вы можете создать приложение FastAPI и указать несколько конечных точек. Каждой..

    Веселье с прокси-сервером JavaScript
    Прокси-серверы JavaScript — это чистый сахар, если вы хотите создать некоторую общую логику в своих приложениях, чтобы облегчить себе жизнь. Вот один пример: Связь клиент-сервер Мы..

    Получить бесплатный хостинг для разработчиков | Разместите свой сайт за несколько шагов 🔥
    Статические веб-сайты — это веб-страницы с фиксированным содержанием и его постоянным содержанием. Но теперь статические сайты также обрабатывают динамические данные с помощью API и запросов...