Курсор в 3D пространтсве

Тема в разделе "WASM.DirectX", создана пользователем AlexBond, 5 фев 2005.

  1. AlexBond

    AlexBond Member

    Публикаций:
    0
    Регистрация:
    30 янв 2005
    Сообщения:
    69
    Адрес:
    Belarus
    Я видел во многих программах, как курсор работал с 3D-объектами. Можно было нажимать, выделять объект, являющийся не 2D, а 3D. Может кто-нибудь подскажет, как получить информацию об объекте под курсором в DirectX или в OpenGL.
     
  2. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    используется другой подход: курсор работает с логическими объектами, а те в свою очередь отрисовываются на экран.
     
  3. jekyll

    jekyll New Member

    Публикаций:
    0
    Регистрация:
    20 мар 2003
    Сообщения:
    92
    Адрес:
    Russia
    Если моя девичья память мне не изменяет, то в примерах к glut есть такая фишка. Там типа шарик и кубик, тыкая на которые выпадает MessageBox - вы попали на шарик, вы попали на кубик.
     
  4. keYMax

    keYMax New Member

    Публикаций:
    0
    Регистрация:
    2 июл 2003
    Сообщения:
    276
    Адрес:
    Новоуральск
    В Direct3D пример выделения объекта или полигонов его составляющих имеется в стандартной поставке SDK и называется Pick. Вкратце суть метода в данном примере такова: берутся экранные координаты мыши и преобразовываются через проектирование и видовую матрицу в луч, который идет из точки нажатия, до точки в сцене, а далее проверяется каждый полигон модели на пересечение с этим лучом. Если таковое имеется, то соответственно попали мышью в полигон или в объект.
     
  5. AlexBond

    AlexBond Member

    Публикаций:
    0
    Регистрация:
    30 янв 2005
    Сообщения:
    69
    Адрес:
    Belarus
    jekyll







    Если есть, то скажи где взять твои примеры glut?



    keYMax

    Если не сложно, мог бы ты прислать мне пример Pick.

    AlexBond2@tut.by
     
  6. keYMax

    keYMax New Member

    Публикаций:
    0
    Регистрация:
    2 июл 2003
    Сообщения:
    276
    Адрес:
    Новоуральск
    Проверь почту.
     
  7. jekyll

    jekyll New Member

    Публикаций:
    0
    Регистрация:
    20 мар 2003
    Сообщения:
    92
    Адрес:
    Russia
  8. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    AlexBond

    На www.gamedev.ru есть статья в разделе OpenGL, называется "Выбор объектов средствами OpenGL" или как-то так.
     
  9. OtD

    OtD Member

    Публикаций:
    0
    Регистрация:
    19 мар 2005
    Сообщения:
    31
    Адрес:
    Алма-Ата, Kazakhstan
    AlexBond

    Принцип работы этого механизма прост: курсору назначаете горячую площадь(в отличии от 2D в GUI, там горячая точка), при активировании курсора(нажатие, отпускание, перемещение или двойной щелчок) эта горячая площадь курсора проицируется на весь ваш видео порт(то есть разворачивается на всё окно), в этот момент вы записываете все объекты которые попали в ортогональный бокс отсечения вида, затем проходите по их значениям глубины и говорите какой объект вам нужен(ближний, дальний или любой между ними), но предварительно, в конвеере прогона, вам нужно активным объектам дать имена и окружить их парой функций glPushName(имя_объекта); и glPopName();. По этому имени вы и найдёте активные объекты нужные вам.

    Заметьте: когда горячая площадь курсора разворачивается на весь экран, вы можете это не выводить на экран, и для пользователя вся процедура будет скрыта.

    Мало того, есть возможность устанавливать фокус ввода клавиатуры на любой объект сцены(как в виндовс окошках) и далее отправлять сообщения от клавиатуры выбраному объекту.

    Демо программу и алгоритм реализации вы можете найти здесь, то есть на моей страничке. Удачи.
     
  10. fridge

    fridge New Member

    Публикаций:
    0
    Регистрация:
    30 окт 2005
    Сообщения:
    5
    Адрес:
    Russia
    keYMax

    Не подскажешь как можно сделать то что ты описал через OpenGL? Только мне не нужна мышь - точка на экране будет заранее задана и мне нужно узнать расстояние до того самого полигона модели.