DirectX 3D Ball与Wall的逼真碰撞响应

时间:2018-01-11 15:18:54

标签: c++ 3d directx collision-detection game-physics

问题
我面临的问题是来自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;
}

非常感谢任何帮助。

0 个答案:

没有答案