Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: ded от Август 29, 2021, 15:38



Название: как оформить выбор и нажатие 3d объекта?
Отправлено: ded от Август 29, 2021, 15:38
Приветствую!

На сцене нужно организовать несколько 3d объектов и при нажатии на них организовать какое либо действие. Подскажите куда смотреть и как правильно организовать?


Название: Re: как оформить выбор и нажатие 3d объекта?
Отправлено: Igors от Август 30, 2021, 04:38
На сцене нужно организовать несколько 3d объектов и при нажатии на них организовать какое либо действие.
Не стоит нарываться на "какой-либо" ответ  :) Лучше уточнить, типа "например переместить объект(ы) в сцене"

Подскажите куда смотреть и как правильно организовать?
Опять нужна конкретика: "на чем" (на какой либе, API) Вы собрались это делать? Напр на голом/чистом OpenGL - это работа на месяцы, с упрощениями - на недели.


Название: Re: как оформить выбор и нажатие 3d объекта?
Отправлено: qtkoder777 от Август 30, 2021, 17:24
Напр на голом/чистом OpenGL - это работа на месяцы, с упрощениями - на недели.
В самом старом OpenGL был механизм "selection", позволяющий определить на какой полигон щёлкнули.


Название: Re: как оформить выбор и нажатие 3d объекта?
Отправлено: __Heaven__ от Август 31, 2021, 10:05
Я подобную задачу решаю на плюсовом коде. Клик пользователя преобразую в линию, ищу пересечение этой линии с параллелепипедами, которые описывают объекты. Если таких больше 1, то ищу пересечения с треугольниками в объектах


Название: Re: как оформить выбор и нажатие 3d объекта?
Отправлено: Igors от Август 31, 2021, 15:30
Да, ответ на (первый взгляд) простой вопрос - обширнвя тема  :)
В самом старом OpenGL был механизм "selection", позволяющий определить на какой полигон щёлкнули.
"Было да сплыло" как началась котовасия с шейдерами. Можно протолунуться через "compatibility profile" но это бесперспективно

Я подобную задачу решаю на плюсовом коде. Клик пользователя преобразую в линию, ищу пересечение этой линии с параллелепипедами, которые описывают объекты. Если таких больше 1, то ищу пересечения с треугольниками в объектах
Говорят просто "куб" или "bounding box", всем ясно что он может иметь разные размеры по осям. И точнее "луч" вместо "линия". И фейс - не только треугольник.

Да, если выбор только объектов целиком - то можно отделаться bounding box'ом. Впрочем и тут .. такие милые задачки как пересечение луча с кубом многих раздражают, ведь хочется "взять готовое и не париться", но так не выходит  :)

А вот с выбором фейсов или вертексов - мрачно. Sofware реализация несложна, но может  оказаться недостаточной по скорости. Популярный совет - рендерить каждый фейс своим цветом и потом читать картинку. Лично мне такой способ не кажется хорошим - возможности ограничены, а возни с шейдерами  все равно немало


Название: Re: как оформить выбор и нажатие 3d объекта?
Отправлено: ssoft от Сентябрь 02, 2021, 08:15
На сцене нужно организовать несколько 3d объектов и при нажатии на них организовать какое либо действие. Подскажите куда смотреть и как правильно организовать?

Если имеется в виде QGraphicsScene, то смотреть нужно в сторону QGraphicsItem и его методов.
Если самостоятельная реализация событий на OpenGL, то в сторону http://www.prog.org.ru/index.php?topic=32756


Название: Re: как оформить выбор и нажатие 3d объекта?
Отправлено: ded от Сентябрь 09, 2021, 09:57
Спасибо за понимание и сдержанность =)


В общем на QML получилось выделать 3d обьекты на view3d с помощью включения свойства pickable, есть пример. Но появился новый вопрос - я вращаю обьект мышью по mousearea, которая настроена на область обьекта.. Для  выбора обьекта mousearea должна быть растянута на весь view3d, но тогда не вращается обьект по событию мыши...
В общем mousearea для pick перекрывает mousearea для вращения объекта и не работают кнопки расположенные под этим mousearea. Как поступают в данном случае?




Название: Re: как оформить выбор и нажатие 3d объекта?
Отправлено: Igors от Сентябрь 10, 2021, 10:04
Типичные проблемы "высокоуровневого" API. Да, оно вроде "все делает" и экономит массу времени и сил, но... с др стороны...

Для  выбора обьекта mousearea должна быть растянута на весь view3d, но тогда не вращается обьект по событию мыши...
Ничего не знаю про QML, но с точки зрения здравого смысла - бред собачий. При одном view выбор работает, при другом - нет. С какого перепугу ??? Откуда взялось такое ограничение?

В общем, связались с этой свисто-перделкой - вот в разделе QML и спрашивайте


Название: Re: как оформить выбор и нажатие 3d объекта?
Отправлено: ded от Сентябрь 10, 2021, 13:21
Типичные проблемы "высокоуровневого" API. Да, оно вроде "все делает" и экономит массу времени и сил, но... с др стороны...

Для  выбора обьекта mousearea должна быть растянута на весь view3d, но тогда не вращается обьект по событию мыши...
Ничего не знаю про QML, но с точки зрения здравого смысла - бред собачий. При одном view выбор работает, при другом - нет. С какого перепугу ??? Откуда взялось такое ограничение?

В общем, связались с этой свисто-перделкой - вот в разделе QML и спрашивайте

все что вы сказали, к сожалению правда... но так это хобби, то сойдет.
подскажите пожалуйста тогда верный путь


Название: Re: как оформить выбор и нажатие 3d объекта?
Отправлено: Igors от Сентябрь 10, 2021, 14:37
подскажите пожалуйста тогда верный путь
Ну такой путь необязательно должен быть/существовать, ларчик может просто "не открываться" :) В рамках хобби - не знаю, есть смысл еще поковыряться с QML, может и проскочите