Модераторы: Rickert, Alexeis, BorisVorontsov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа с мышью в OpenGL 
:(
    Опции темы
AndreyIQ
Дата 25.8.2011, 16:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 185
Регистрация: 5.2.2007

Репутация: нет
Всего: 8



Доброе время суток.
Только начал изучать С++.
Пишу приложение OpenGL. Динамически добовляются объекты на сцену.
Каждый объект должен реагировать на движение мыши.
Сейчас сделал в CALLBACK функцие glutMotionFunc перебор всех объектов и вызов у них соответствующего метода, но мне кажется что это не правильно. Как лкчше реализовать?
PM MAIL   Вверх
bsa
Дата 25.8.2011, 16:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: нет
Всего: 196



Все зависит от того, что как именно должны двигаться объекты. если одинаково (в одну сторону), то можно просто манипулировать матрицей.
PM   Вверх
AndreyIQ
Дата 25.8.2011, 16:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 185
Регистрация: 5.2.2007

Репутация: нет
Всего: 8



Нет необходимо чтобы их можно было передвигать мышью. т.е. схватил объект перенес в другое место отпустил.
PM MAIL   Вверх
Amp
Дата 25.8.2011, 18:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 886
Регистрация: 17.2.2009

Репутация: 2
Всего: 17



Тогда гугли по "ray picking". Вкратце - по двум точкам (unproject экранных координат для near и far плоскостей) строится луч, проверяется пересекает ли луч какой-либо объект на сцене (математика пересечения прямой и плоскости, прямой и сферы), далее уже реализуется dragging. Если проекция ортогональная, то построение луча немного упрощается.

Это сообщение отредактировал(а) Amp - 25.8.2011, 18:23
PM MAIL   Вверх
AndreyIQ
Дата 25.8.2011, 19:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 185
Регистрация: 5.2.2007

Репутация: нет
Всего: 8



Цитата(Amp @ 25.8.2011,  18:22)
Тогда гугли по "ray picking". Вкратце - по двум точкам (unproject экранных координат для near и far плоскостей) строится луч, проверяется пересекает ли луч какой-либо объект на сцене (математика пересечения прямой и плоскости, прямой и сферы), далее уже реализуется dragging. Если проекция ортогональная, то построение луча немного упрощается.

Либо я Вас не понял, либо я не правильно объяснил суть проблемы.
Проблем с определение на каком объекте находится курсор нет, т.к. работаю  с 2D.
Сейчас мне единственное что не нравится это то что при срабатывании glutMotionFunc приходится переберать все объекты в цикле. Все как бы работает, но не красиво это. Хотелось бы сделать к примеру как в windows, реализованы сообщения. К примеру сделать пользовательское сообщение наподоби WM_MOUSEMOVE и при сробатывании glutMotionFunc просто посылать сообщение, а все функции подписанные на него автоматически срабатывали. Это возможно реализовать или это бред?
PM MAIL   Вверх
Amp
Дата 25.8.2011, 20:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 886
Регистрация: 17.2.2009

Репутация: 2
Всего: 17



Так в заданный момент времени под курсором мыши только один объект - ему и посылаешь сообщения или дергаешь обработчики. 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Вы можете найти полезным что...
Alexeis
Rickert
  • Английская документация по DirectX лежит где-то здесь.
  • Английская документация по OpenGL лежит где-то там.
  • Гейм-дев у нас обсуждают где-то тут

Ждём вас! С уважением, Alexeis, Rickert.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема »


 




[ Время генерации скрипта: 0.1017 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.