У меня есть несколько трехмерных объектов в простой сцене Qt3D с камерой. Это устанавливается за несколько минут в Qt3D используя C ++. Каков наилучший способ обнаружения столкновений? Я не спрашиваю, как сделать обнаружение столкновений, но какой лучший способ сделать это в Qt3D.
Я изменил вопрос с лучшего пути — на заданный путь! Это система сущностных компонентов, и вопрос связан с архитектурой Qt3D, которую не так просто понять с точки зрения того, где это добавить. KDAB говорят о намеченном пути, … что это такое ??
Добавлено 15 мая:
Я использую C ++, а не QML.
Из комментариев и ответов становится ясно, что предполагаемый способ заключается в добавлении обнаружения столкновений в аспектах.
Если это правильно, то как вы можете, например, вести список сталкивающихся объектов в аспектах? кажется невозможным для меня … надеюсь, у кого-то есть идея.
**** Добавлено 23 мая ****
Обнаружение столкновений было включено в Qt3D раньше, многие вещи были устранены, а Qt3D был переработан. В результате возникает много проблем с отсутствием документации. Пожалуйста, не отвечайте на это, если вы на самом деле не знаете внутреннюю работу Qt3D, я не ищу кратких ответов, которые вы можете найти в Google, но более глубокого понимания, из-за проблемы с отсутствием документации о новом способе работы из КДАБ.
Qt3D использует Entity Component System (ECS), и обычно в таких системах сущности представляют собой наборы компонентов, и существуют системы, которые работают над сущностями на основе их содержимого. Qt3D ничем не отличается, ваши QML-скрипты определяют сущности и связывают с ними компоненты, а предопределенные системы Qt3D работают с ними и манипулируют ими, чтобы создать намеченный интерфейс пользовательского интерфейса. На этом большинство учебников по Qt3D заканчиваются, некоторые продолжают упоминать, что есть способы сборки поверх Qt3D.
Предопределенные системы Qt3D могут быть дополнены новыми системами, в Qt3D эти системы называются Аспектами. Чтобы расширить Qt3D новыми Аспектами, например, физическим моделированием, вы должны определить новый Аспект, который охватывает реализацию системы, и пользовательские компоненты, которые инкапсулируют любые данные, необходимые для работы Аспекта, которые иначе не могут быть связаны с сущностью. , Как только вы все это определили и зарегистрировали в контексте Qt3D, вам просто нужно заполнить ваши сущности компонентами, которые требуются в системе, и Aspect будет вызван для работы над ними, в результате чего реализация будет работать над ними и манипулировать ими.
Теперь оставшийся вопрос заключается в том, как внедрить физическую (или любую основанную на сопряжении сущностей) систему в ECS, которая была повсеместно рассмотрена в дискуссиях по разработке игр ECS. Ниже я представил слайды и блоги из KDAB, в которых рассказывается о скоростном курсе по архитектуре Qt3D и его объяснениях, а также учебное пособие, объясняющее все входы и выходы расширения Qt3D с пользовательским аспектом. Удачи!
Слайды:
https://www.qtdeveloperdays.com/sites/default/files/qt3d-in-depth.pdf
Деталь:
https://www.kdab.com/overview-qt3d-2-0-part-1/
https://www.kdab.com/overview-qt3d-2-0-part-2/
Руководство:
https://www.kdab.com/writing-custom-qt-3d-aspect/
https://www.kdab.com/writing-custom-qt-3d-aspect-part-2/
Приложение: К сожалению, отсутствует третья часть 🙁
Других решений пока нет …