使用3d obj模型进行Java碰撞检测

时间:2015-10-13 08:52:08

标签: java

我环顾四周,但只找到了如何检查2d对象的碰撞..对于我目前的项目,我想检查3d中的colisions(我使用obj模型) - 我可能自己找出一些东西问题是我只知道每个物体的中心点。

有没有办法获得对象的边界,以便我可以检查它是否接触到另一个对象的边界?获取此信息的最佳方式是什么?

编辑:可能有用的更多信息:

我正在使用lwjgl 2.8,

我的对象是obj文件,

我可以获得物体的位置,比例和旋转

编辑:这是我在youtube上发现的: https://www.youtube.com/watch?v=Iu6nAXFm2Wo&list=PLEETnX-uPtBXm1KEr_2zQ6K_0hoGH6JJ0&index=4

1 个答案:

答案 0 :(得分:0)

你所拥有的被称为triangle soup [1]:你得到了与三角形信息相关的顶点位置(,纹理和法线)信息。你可以做的是将一个网格中的每个三角形与另一个网格相交。你可以做暴力(通过每次测试所有其他三角形)或建立一个space partitioning data structure来加速你的交叉点。

E.g。每个网格构建一个Octree并迭代其中一个叶子:对于每个叶子,测试其边界框对着另一个树叶的叶子,并对每个碰撞对进行暴力测试每个三角形内的三角形这些对中的任何一对(或者只测试网格A中的那些对网格B中的那些,如果你不关心自交叉)。

例如,有OpenMeshBullet这类算法的库。但我只知道Java的一个端口:JBullet

编辑:如果您只对近似碰撞感兴趣,可以丢弃有关三角形的所有信息,并从顶点构建一个边界体积(例如,轴对齐框只是所有顶点位置的最小值和最大值,类似地构建一个定向框,但你必须先找到一个足够好的方向,一个球体是a bit more involved,最后你有一个凸网格,它使用与普通网格相同的交叉测试,但是小于原始和凸起,允许对一般交叉测试进行一些优化)。

[1]:有other kinds of 3D representations记录有关三角形连接方式的信息。您可以想象在网格A和网格B中只找到两个相交的三角形,然后开始仅在初始交叉点的邻域中搜索相交的三角形...这些算法更加复杂,但对于变形的网格具有优势,不必每次都需要重建空间分区数据结构,因为你必须使用三角汤。

相关问题