3d Libgdx Camera.Frustum.boundsInFrustum对大型模型是否精确?

3d Libgdx Camera.Frustum.boundsInFrustum对大型模型是否精确?,3d,libgdx,bounding-box,frustum,3d,Libgdx,Bounding Box,Frustum,这张图主要解释了我的问题: frustum.BoundsFrustum方法会将地板检测为其内部,但是不会检测到长方体或具有砖块纹理的另一个长方体,并且frustum 3d表示不会接触或包含任何长方体。我尝试过地图中的其他位置和对象,平截头体远平面后面的大型模型经常会干扰并触发此问题 即使我用boundsInFrustum替换了sphereInFrustum方法,并且缩短了frustum长度,以便在测试中获得位于远平面后的一些对象,平截头体弯曲测试也可以正常工作。我将尝试通过修改对象的大小来复制其

这张图主要解释了我的问题:

frustum.BoundsFrustum方法会将地板检测为其内部,但是不会检测到长方体或具有砖块纹理的另一个长方体,并且frustum 3d表示不会接触或包含任何长方体。我尝试过地图中的其他位置和对象,平截头体远平面后面的大型模型经常会干扰并触发此问题

即使我用boundsInFrustum替换了sphereInFrustum方法,并且缩短了frustum长度,以便在测试中获得位于远平面后的一些对象,平截头体弯曲测试也可以正常工作。我将尝试通过修改对象的大小来复制其中的问题。已经试过了,测试工作完美无瑕,我的代码中有些东西

注意:FrustumCullingTest默认情况下使用bullet来测试对象是否位于另一个对象内,因此它不适用于这种情况


编辑:边界图像场景中的平截头体告诉我,至少有一个地板角确实位于任何平截头体平面的内表面,因此该方法始终返回true。我认为这里发生的事情是,如果截锥体比物体小,并且它指向物体的中间,那么每个平面的内表面都有一个点。

如果没有看到您的代码,几乎不可能帮助您解决特定问题。但是,libgdx的bullet tests包中的FrustumCullingTest在大多数场景中都没有用处,请不要将代码基于此。相反,这可能会有所帮助:我使用不用于剔除的平截头体需要比使用球体边界更精确的方法。我不能使用球体来表示大而平的对象。无论如何,谢谢你的精彩教程!:我想这次我会用子弹