Russian Qt Forum
Ноябрь 22, 2024, 00:25 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: как оформить выбор и нажатие 3d объекта?  (Прочитано 4435 раз)
ded
Новичок

Offline Offline

Сообщений: 15


Просмотр профиля
« : Август 29, 2021, 15:38 »

Приветствую!

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

Сообщений: 11445


Просмотр профиля
« Ответ #1 : Август 30, 2021, 04:38 »

На сцене нужно организовать несколько 3d объектов и при нажатии на них организовать какое либо действие.
Не стоит нарываться на "какой-либо" ответ  Улыбающийся Лучше уточнить, типа "например переместить объект(ы) в сцене"

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

Сообщений: 245


Просмотр профиля
« Ответ #2 : Август 30, 2021, 17:24 »

Напр на голом/чистом OpenGL - это работа на месяцы, с упрощениями - на недели.
В самом старом OpenGL был механизм "selection", позволяющий определить на какой полигон щёлкнули.
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #3 : Август 31, 2021, 10:05 »

Я подобную задачу решаю на плюсовом коде. Клик пользователя преобразую в линию, ищу пересечение этой линии с параллелепипедами, которые описывают объекты. Если таких больше 1, то ищу пересечения с треугольниками в объектах
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #4 : Август 31, 2021, 15:30 »

Да, ответ на (первый взгляд) простой вопрос - обширнвя тема  Улыбающийся
В самом старом OpenGL был механизм "selection", позволяющий определить на какой полигон щёлкнули.
"Было да сплыло" как началась котовасия с шейдерами. Можно протолунуться через "compatibility profile" но это бесперспективно

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

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

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

Сообщений: 584


Просмотр профиля
« Ответ #5 : Сентябрь 02, 2021, 08:15 »

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

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

Offline Offline

Сообщений: 15


Просмотр профиля
« Ответ #6 : Сентябрь 09, 2021, 09:57 »

Спасибо за понимание и сдержанность =)


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


Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #7 : Сентябрь 10, 2021, 10:04 »

Типичные проблемы "высокоуровневого" API. Да, оно вроде "все делает" и экономит массу времени и сил, но... с др стороны...

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

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

Offline Offline

Сообщений: 15


Просмотр профиля
« Ответ #8 : Сентябрь 10, 2021, 13:21 »

Типичные проблемы "высокоуровневого" API. Да, оно вроде "все делает" и экономит массу времени и сил, но... с др стороны...

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

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

все что вы сказали, к сожалению правда... но так это хобби, то сойдет.
подскажите пожалуйста тогда верный путь
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #9 : Сентябрь 10, 2021, 14:37 »

подскажите пожалуйста тогда верный путь
Ну такой путь необязательно должен быть/существовать, ларчик может просто "не открываться" Улыбающийся В рамках хобби - не знаю, есть смысл еще поковыряться с QML, может и проскочите
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.233 секунд. Запросов: 22.