Каков (или хороший) способ обнаружения коллизий в Qt3D? - PullRequest
0 голосов
/ 14 мая 2018

У меня есть несколько трехмерных объектов в простой сцене Qt3D с камерой.Он устанавливается за несколько минут в Qt3D с использованием C ++ .Каков наилучший способ обнаружения столкновений?Я не спрашиваю, как сделать обнаружение столкновений, но какой лучший способ сделать это в Qt3D.

Я сменил вопрос с лучшего способа - на заданный способ!Это система сущностных компонентов, и вопрос связан с архитектурой Qt3D, которую не так просто понять с точки зрения того, где это добавить.KDAB говорят о намеченном пути ... что это такое ??

Добавлено может 15:

Я использую C ++, а не QML.

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

Если это правильно, то как, например, вы можете вести список сталкивающихся объектов в аспектах?кажется невозможным для меня ... надеюсь, у кого-то есть идея.

**** Добавлено 23 мая ****

Ранее в Qt3D было включено обнаружение столкновений, многие вещи были убраны, а Qt3D был переработан.В результате возникает много проблем с отсутствием документации.Пожалуйста, не отвечайте на это, если вы на самом деле не знаете внутреннюю работу Qt3D, я не ищу кратких ответов, которые вы можете найти в Google, но более глубокого понимания, из-за проблемы с отсутствием документации о новом способе работыиз КДАБ.

1 Ответ

0 голосов
/ 14 мая 2018

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/
Приложение: К сожалению, отсутствует третья часть: (

...