用Java实现Sweep和Prune

时间:2017-05-03 10:31:46

标签: java collision-detection

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

但我不知道任何C ++并且无法转换代码。如何在java中使用sweep和prune实现宽相碰撞检测?

1 个答案:

答案 0 :(得分:0)

你想要达到的目标并不是那么简单,而且可能在这里回答太多,但让我们试着描述一些让你入门的基本步骤。

据我记得ThinMatrix的教程系列,你首先必须首先实现Axis-Aligned Bounding Boxes(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