我正在使用OpenGL和LWJGL关注ThinMatrix的游戏开发教程,并坚持在我的游戏中实现碰撞检测。我在网上提到了这些页面 -
但我不知道任何C ++并且无法转换代码。如何在java中使用sweep和prune实现宽相碰撞检测?
答案 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:
从那里我建议整合现有的物理库,例如:
后者实现了您在Java中的链接文章中描述的算法:SweepAndPruneAlgorithm.java。