所以我设置了所有可能会产生碰撞检测的东西,但是我对于如何碰撞碰撞感到很茫然。
所以从我的对象中我得到了一些我可以使用的变量但是对于一个简单的BoundingBox我可能只需要这些:
System.out.println("width: " + width);
System.out.println("height: " + height);
System.out.println("depth: " + depth);
System.out.println("center[" + xPos+ "/" +yPos+ "/" +zPos+"]");
所以我想要的是一些允许我在两个BoundingBox相互交互的情况下使用ckeck的代码,它不应该太难以为此提出代码但是我真的很难用这个代码,所以我将不胜感激任何帮助!
我将有两个提到属性的aabb:
private void AABB_1()
}
// (width,height,depth,xPos,yPos,zPos)
}
private void AABB_2()
}
// (width,height,depth,xPos,yPos,zPos)
}
在BoundingBox方法中,我想检查两个aabb的交互,并将布尔值设置为false或true:
public void BoundingBox()
{
AABB_1();
AABB_2();
boolean intersection;
// check if AABB_1 and AABB_2 intersect each other
// If yes set intersection = true
// If no set intersection = false
}
这里的BoundingBox方法将是碰撞检测,但正如我所说,我不知道我会如何ckeck for intersection,有没有人有想法?
答案 0 :(得分:0)
首先考虑1D:
//(minX---maxX)
//Non overlap cases:
//a: |----|
//b: |----|
//a: |----|
//b: |----|
public static void intersectOnX(a,b){
if (b.minX > a.maxX || a.minX > b.maxX)
return false;//no intersect
else
return true;//intersect
}
对每个额外的维度重复此操作:
public static void intersect(a,b){
if (!intersectOnX(a,b))
return false;//no intersect
if (!intersectOnY(a,b))
return false;//no intersect
if (!intersectOnZ(a,b))
return false;//no intersect
return true;//intersect!
}
答案 1 :(得分:0)
鉴于您有一个带有中心和三个扩展的框,您还可以编写一个Box方法
boolean overlaps( Box other ){
return
Math.abs(xPos - other.xPos) <= (width + other.width)/2
&&
Math.abs(yPos - other.yPos) <= (depth + other.depth)/2
&&
Math.abs(zPos - other.zPos) <= (height + other.height)/2;
}
(检查x,y,z和宽度,深度,高度是否相关。)
如果您只有一些存储这些6 + 6值的变量,您可以将表达式写为例如。
Number x1, y1, z1, w1, d1, h1;
Number x2, y2, z2, w2, d2, h2;
boolean overlaps =
Math.abs(x1 - x2) <= (w1 + w2)/2
&&
Math.abs(y1 - y2) <= (d1 + d2)/2
&&
Math.abs(z1 - z2) <= (h1 + h2)/2;