c++ - 在Qt3D中进行碰撞检测的预期方法(或好方法)是什么?

标签 c++ qt 3d game-development qt3d

我在带相机的简单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中,这些系统称为Aspects。要使用新的方面(例如物理模拟)扩展Qt3D,您必须定义一个新的方面,用于包装系统的实现,以及自定义组件,这些组件封装了方面运行所需的任何数据,否则这些数据无法与实体相关联。一旦定义好所有内容并将其注册到Qt3D上下文中,您只需要用系统所需的组件填充实体,然后将调用Aspect对它们进行操作,从而使实现对它们进行操作和操作。

现在剩下的问题是如何在ECS中实现物理(或任何基于实体配对的)系统,这在ECS游戏设计讨论中已广泛涉及。在下面,我提供了来自KDAB的幻灯片和博客,它们提供了Qt3D架构中的高速崩溃类(class)及其背后的推理,以及一个教程,介绍了使用自定义方面扩展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/
附录:不幸的是,似乎缺少第三个部分:(

关于c++ - 在Qt3D中进行碰撞检测的预期方法(或好方法)是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50325159/

相关文章:

c++ - 如何获得C++或Qt中所有货币符号和货币缩写的数组?

3d - 如何从平面相交的 3D 几何体中提取 2D 切片?

javascript - THREE.js 中的反光 Material

c++ - 在删除/释放优化函数调用之前不会进行空检查吗?

C++ - 使用 Visual Studio 的成员函数声明

linux - ssl/qsslsocket_openssl.cpp :1414: error: q_ssl_ctrl was not declared in this scope error

c++ - 根据子窗口小部件调整 QMainWindow 的大小?

ios - 3D AR 绘图应用程序在绘图时出现滞后和帧速度显着下降

c++ - C++中的字符赋值

qt - 我如何开始使用 QtLinguist 来翻译我的 QtCreator 项目?