在 Java 中实施扫描和修剪

Implementing Sweep and Prune in Java

我正在使用 OpenGL 和 LWJGL 遵循 ThinMatrix 的游戏开发教程,并坚持在我的游戏中实现碰撞检测。我在网上参考了这些页面 -

但是我不会C++,无法转换代码。我将如何在 java 中使用扫描和修剪实现宽相碰撞检测?

您要实现的目标并非微不足道,可能太多而无法在此处回答,但让我们尝试描述一些基本步骤以帮助您入门。

就我记得的 ThinMatrix 教程系列而言,您必须首先实施轴对齐边界框 (AABB),然后将它们包裹在您的实体周围,因为您需要这些来进行宽相检测。您可以简单地加载一个 1x1x1 立方体模型并相应地缩放变换矩阵,但是您将如何缩放它?

在解析您的 obj 文件期间,记住每个模型的最小和最大顶点位置 (minX, minY, minZ, maxX, maxY, maxZ)。

然后您必须重新缩放 1x1x1 边界框,因此计算边界框的 scaleX, scaleY, scaleZ 并确保它也符合原始实体的比例:

float scaleX = (maxX - minX) * model.getScale();
float scaleY = (maxY - minY) * model.getScale();
float scaleZ = (maxZ - minZ) * model.getScale();

然后您必须计算 transformationMatrix 并将您的比例值应用于立方体。 ThinMatrix 实现了方法 Maths.createTransformationMatrix(...),您必须使用三个新参数对其进行扩展。

在某一时刻,您最终会得到与此类似的 AABB:

screenshot

从那里我建议集成现有的物理库,例如:

后者实现了您在 Java 中的链接论文中描述的算法:SweepAndPruneAlgorithm.java