![]() |
|
Модераторы: Rickert, Alexeis, BorisVorontsov |
![]()
|
|
| AndreyIQ |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 185 Регистрация: 5.2.2007 Репутация: нет Всего: 8 |
Доброе время суток.
Только начал изучать С++. Пишу приложение OpenGL. Динамически добовляются объекты на сцену. Каждый объект должен реагировать на движение мыши. Сейчас сделал в CALLBACK функцие glutMotionFunc перебор всех объектов и вызов у них соответствующего метода, но мне кажется что это не правильно. Как лкчше реализовать? |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: нет Всего: 196 |
Все зависит от того, что как именно должны двигаться объекты. если одинаково (в одну сторону), то можно просто манипулировать матрицей.
|
|||
|
||||
| AndreyIQ |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 185 Регистрация: 5.2.2007 Репутация: нет Всего: 8 |
Нет необходимо чтобы их можно было передвигать мышью. т.е. схватил объект перенес в другое место отпустил.
|
|||
|
||||
| Amp |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 886 Регистрация: 17.2.2009 Репутация: 2 Всего: 17 |
Тогда гугли по "ray picking". Вкратце - по двум точкам (unproject экранных координат для near и far плоскостей) строится луч, проверяется пересекает ли луч какой-либо объект на сцене (математика пересечения прямой и плоскости, прямой и сферы), далее уже реализуется dragging. Если проекция ортогональная, то построение луча немного упрощается.
Это сообщение отредактировал(а) Amp - 25.8.2011, 18:23 |
|||
|
||||
| AndreyIQ |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 185 Регистрация: 5.2.2007 Репутация: нет Всего: 8 |
Либо я Вас не понял, либо я не правильно объяснил суть проблемы. Проблем с определение на каком объекте находится курсор нет, т.к. работаю с 2D. Сейчас мне единственное что не нравится это то что при срабатывании glutMotionFunc приходится переберать все объекты в цикле. Все как бы работает, но не красиво это. Хотелось бы сделать к примеру как в windows, реализованы сообщения. К примеру сделать пользовательское сообщение наподоби WM_MOUSEMOVE и при сробатывании glutMotionFunc просто посылать сообщение, а все функции подписанные на него автоматически срабатывали. Это возможно реализовать или это бред? |
|||
|
||||
| Amp |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 886 Регистрация: 17.2.2009 Репутация: 2 Всего: 17 |
Так в заданный момент времени под курсором мыши только один объект - ему и посылаешь сообщения или дергаешь обработчики.
|
|||
|
||||
![]()
|
| Вы можете найти полезным что... | |
|
|
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |