我在一个简单的Qt3D场景中有一些3D对象,带有相机。它是使用C++在Qt3D中在几分钟内设置的。进行碰撞检测的最佳方法是什么?我不是在问如何进行碰撞检测,而是在Qt3D中执行的最佳方法是什么。
我将问题从最佳方式更改为预期方式!这是一个实体组件系统,问题与Qt3D的架构有关,就在哪里添加它而言,理解起来并不那么简单。KDAB 谈论一种预期的方式,...那是什么方式??
5 月 15 日添加:
我使用的是C++,而不是QML。
从评论和答案中,似乎很明显,预期的方法是在各个方面添加碰撞检测。
如果这是正确的,那么例如,您如何维护各个方面的碰撞对象列表? 对我来说似乎是不可能的...希望有人有想法。
5 月 23 日添加 ****
碰撞检测之前包含在Qt3D中,去掉了很多东西,重新设计了Qt3D。因此,缺乏文档存在许多问题。如果您真的不了解 Qt3D 的内部工作原理,请不要回复这个问题,我不是在寻找您可以谷歌自己搜索的简短答案,而是更深入的理解,因为缺乏文档关于 KDAB 的新工作方式。
> Qt3D使用实体组件系统(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/
附录:
不幸的是,似乎缺少第 3 部分:(