我在带有相机的简单Qt3D场景中有一些3d对象。它使用C ++ 在Qt3D 中设置几分钟。进行碰撞检测的最佳方法是什么?我不是问如何进行碰撞检测,但最好的方法是在Qt3D中进行。
我从最好的方式改变了问题 - 改变了预期的方式!这是一个实体组件系统,问题与Qt3D的体系结构有关,在添加它的位置方面并不是那么容易理解。 KDAB谈论一种预期的方式,......那是什么意思?
已添加可能15:
我使用的是C ++,而不是QML。
从评论和答案中,似乎很清楚,预期的方法是在方面添加碰撞检测。
如果这是正确的,那么你怎么能在方面维护一个碰撞对象列表?对我来说似乎不可能......希望有人有个主意。
****已添加可能23 ****
碰撞检测之前包含在Qt3D中,很多东西被取出,Qt3D被重新设计。结果缺少文档存在许多问题。如果你真的不知道Qt3D的内部工作方式,请不要回复此问题,我不是在寻找你可以自己谷歌的简短答案,而是更深入的理解,因为缺乏新方法的工作文件的问题来自KDAB。
答案 0 :(得分:0)
Qt3D使用实体组件系统(ECS),并且通常在这样的系统中,实体是组件的集合,并且存在基于其内容对实体进行操作的系统。 Qt3D也不例外,你的QML脚本定义实体并将组件关联到它们,Qt3D的预定义系统操作并操纵它们以创建预期的用户界面体验,这是Qt3D的大多数教程结束的地方,有些将继续提到有很多方法可以在Qt3D之上构建。
Qt3D的预定义系统可以用新系统补充,在Qt3D中,这些系统称为Aspects。要使用新的Aspects扩展Qt3D,例如物理模拟,您必须定义一个包含系统实现的新Aspect,以及封装Aspect操作所需的任何数据的自定义组件,否则这些数据无法与之相关联实体。一旦你完成所有定义并注册到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部分:(