gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 23:15:21 36 4
gpt4 key购买 nike

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

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

编辑:一些可能有帮助的更多信息:

我正在使用 lwjgl 2.8,

我的对象是obj文件,

我可以得到一个对象的位置、比例和旋转

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

最佳答案

你所拥有的叫做 triangle soup [1]:您获得了顶点位置(、纹理和法线)信息以及三角形信息。您可以做的是将一个网格中的每个三角形与另一个网格相交。您可以通过蛮力(通过每次测试所有其他三角形)或构建 space partitioning data structure 来执行此操作。以加快您的十字路口。

例如 build 一个 Octree每个网格并迭代其中一个叶子:对于这些叶子中的每一个,将其边界框与另一棵树中的叶子进行测试,并且对于这些碰撞对中的每一个,蛮力测试这些对中的任何一个中的每个三角形相互对抗(或者如果您不关心自相交,则只测试网格 A 中的那些与网格 B 中的那些)。

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

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

[1]: 有other kinds of 3D representations记录有关三角形如何连接的信息。您可能会想象在网格 A 和网格 B 中只找到两个相交的三角形,然后开始仅在初始交点的附近搜索相交的三角形......这些算法涉及更多,但对于变形的网格具有优势,你不必像处理三角汤那样每次都重建空间分区数据结构。

关于使用 3d obj 模型进行 Java 碰撞检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33098184/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com