Я видел во многих программах, как курсор работал с 3D-объектами. Можно было нажимать, выделять объект, являющийся не 2D, а 3D. Может кто-нибудь подскажет, как получить информацию об объекте под курсором в DirectX или в OpenGL.
используется другой подход: курсор работает с логическими объектами, а те в свою очередь отрисовываются на экран.
Если моя девичья память мне не изменяет, то в примерах к glut есть такая фишка. Там типа шарик и кубик, тыкая на которые выпадает MessageBox - вы попали на шарик, вы попали на кубик.
В Direct3D пример выделения объекта или полигонов его составляющих имеется в стандартной поставке SDK и называется Pick. Вкратце суть метода в данном примере такова: берутся экранные координаты мыши и преобразовываются через проектирование и видовую матрицу в луч, который идет из точки нажатия, до точки в сцене, а далее проверяется каждый полигон модели на пересечение с этим лучом. Если таковое имеется, то соответственно попали мышью в полигон или в объект.
jekyll Если есть, то скажи где взять твои примеры glut? keYMax Если не сложно, мог бы ты прислать мне пример Pick. AlexBond2@tut.by
AlexBond На www.gamedev.ru есть статья в разделе OpenGL, называется "Выбор объектов средствами OpenGL" или как-то так.
AlexBond Принцип работы этого механизма прост: курсору назначаете горячую площадь(в отличии от 2D в GUI, там горячая точка), при активировании курсора(нажатие, отпускание, перемещение или двойной щелчок) эта горячая площадь курсора проицируется на весь ваш видео порт(то есть разворачивается на всё окно), в этот момент вы записываете все объекты которые попали в ортогональный бокс отсечения вида, затем проходите по их значениям глубины и говорите какой объект вам нужен(ближний, дальний или любой между ними), но предварительно, в конвеере прогона, вам нужно активным объектам дать имена и окружить их парой функций glPushName(имя_объекта); и glPopName();. По этому имени вы и найдёте активные объекты нужные вам. Заметьте: когда горячая площадь курсора разворачивается на весь экран, вы можете это не выводить на экран, и для пользователя вся процедура будет скрыта. Мало того, есть возможность устанавливать фокус ввода клавиатуры на любой объект сцены(как в виндовс окошках) и далее отправлять сообщения от клавиатуры выбраному объекту. Демо программу и алгоритм реализации вы можете найти здесь, то есть на моей страничке. Удачи.
keYMax Не подскажешь как можно сделать то что ты описал через OpenGL? Только мне не нужна мышь - точка на экране будет заранее задана и мне нужно узнать расстояние до того самого полигона модели.