问题
我面临的问题是来自AABB碰撞的2个3D物体碰撞的响应。现在我在整个互联网上搜索高低,以获得解释或示例如何实现,但无济于事。在我解释这个问题之前,请问我没有人指示我去第三方物理库这样做我想从头开始编写代码。
在与砖碰撞球的过程中,我的目标是让球在与砖接触时减小其速度和动量,并在球速度等方向上射出砖块。这部分很容易,我明白哪里我要去那。困难的部分是我如何使砖块逼真看起来像是有点击中它。当球击中砖时,砖应该像真正的碰撞一样旋转和翻转。
这里的最终目标是有一堵砖墙,球与之碰撞,砖块飞走,然后以一种逼真的方式向下倾斜。
这里的关键是影响力轮换。这是我迄今为止的简短视频。
如果您无法看到图片,则链接为:https://giphy.com/gifs/l49JKTW3QHTuMaXZu
代码
球与砖之间的碰撞
bool CollideBoxes(BoundingBox &a, BoundingBox &b) {
float AxMax = a.x + (a.width / 2);
float AxMin = a.x - (a.width / 2);
float AyMax = a.y + (a.depth / 2);
float AyMin = a.y - (a.depth / 2);
float AzMax = a.z + (a.height / 2);
float AzMin = a.z - (a.height / 2);
float BxMax = b.x + (b.width / 2);
float BxMin = b.x - (b.width / 2);
float ByMax = b.y + (b.depth / 2);
float ByMin = b.y - (b.depth / 2);
float BzMax = b.z + (b.height / 2);
float BzMin = b.z - (b.height / 2);
bool condition = false;
if (AxMin < BxMax && AxMax > BxMin) {
condition = true;
}
else {
return false;
}
if (AyMin < ByMax && AyMax > ByMin) {
condition = true;
}
else {
return false;
}
if (AzMin < BzMax && AzMax > BzMin) {
condition = true;
}
else {
return false;
}
return condition;
}
非常感谢任何帮助。