我需要检查一个框是否与球体碰撞。我有一个用x,y,z,宽度,高度,深度定义的BoundingBox类。我也有一个用x,y,z,radius定义的BoundingSphere类。如何检查它们是否相交?框与球碰撞
框与球碰撞
回答
如果您想保持测试的水平,您可以在宽度,高度和深度= 2r的球体周围放置边界框。当然,这承认球体上“非极性”或“非赤道”点的碰撞误报风险。为了解决这个问题,你可以考虑构建一系列层次边界框来增加这些问题区域中命中测试的粒度。
您可能还会从渲染级别解决问题。由于您无法渲染球体,因此通常会使用某种多边形网格。在2D(或3D)多边形之间进行打击测试是一项直接的练习。
不错的发现,链接是最新的,涵盖多个案例。实体盒实体球算法是我见过的大多数游戏引擎使用的(以各种优化形式)。 – Kaganar 2013-05-14 21:58:12
你只需要检查边界框的所有角落与球体中心的距离。这是一些伪代码:
bool collidesWith(BoundingBox b, BoundingSphere s) {
for(Vertex v in b) {
if(distanceBetween(v, s.center) <= s.radius)
return true;
}
return false;
}
首先要检查的是BoundingSphere的BoundingBox是否相交。这是因为这是一个排除更复杂数学的简单方法。
下一步将采用边界框的六个平面(或十二个三角形)中的每一个,并对它们执行从点到多边形测试的距离到球体的中心。如果其中一个小于球体的半径,那么你有一个命中。
多边形,以点距离Matlab代码:http://www.mathworks.com/matlabcentral/fileexchange/12744-distance-from-a-point-to-polygon
有由吉姆·帕特在图形宝石的一章。
我想上面陈旧的链接用来指向他的代码,因为URL中有“arvo”。这link作品 - 至少现在。
- 1. 粒子(布)与球碰撞
- 2. 球线碰撞
- 3. Javascript球碰撞
- 4. 球碰撞问题
- 5. 球对球碰撞 - 在碰撞时获得显着的速度
- 6. 球碰撞问题,只有一半的球碰撞
- 7. 看似简单的球与线碰撞?
- 8. 多个球与碰撞检测
- 9. 球与方块之间的碰撞
- 10. 框与圆碰撞AS3
- 11. AABB vs球体碰撞
- 12. 球和椭圆碰撞
- 13. 弹跳球的碰撞
- 14. 简单的球桨碰撞
- 15. 球和砖碰撞处理
- 16. 乒乓球碰撞问题
- 17. 球碰撞JS公式
- 18. Java“简单”撞球/碰撞练习
- 19. SurfaceView与碰撞
- 20. OnPageIndexChanged与OnItemCommand碰撞
- 21. 与锚点碰撞
- 22. 与Capsule Collider碰撞
- 23. get_driver_instance()与Qt碰撞
- 24. 两个球之间的碰撞
- 25. java弹跳球碰撞不起作用
- 26. 碰撞检测不注册球
- 27. 边界球碰撞不起作用
- 28. 碰撞时更改球的颜色
- 29. 统一:球员死在物体碰撞
- 30. 球和线描和碰撞检测iPhone
可能的重复:http://stackoverflow.com/questions/4578967/cube-sphere-intersection-test(虽然主题那里说“立方体”,答案适用于所有轴对齐框)。 – 2011-02-25 20:33:50