在DirectX 11中添加AABB碰撞

时间:2019-01-21 14:21:39

标签: c++ directx

我正在尝试使用DX11渲染的多维数据集设置AABB Collision。

我有一个UserInput类,其中包含每个多维数据集的变量,例如位置,坐标位置等。

我做到了,所以只有当盒子碰撞时,方灯才会出现,这很好用。但是由于某种原因,我无法让他们发生碰撞,因为他们无法彼此通过。

用户输入类别

class UserInput
{
public:
    float xPos;
    float yPos;
    float zPos;
    Vector3 vecMin;
    Vector3 vecMax;
    float rotationX;
    float rotationY;
    float rotationZ;
    bool isMoving;
    bool isMovingRight;
    bool isMovingLeft;
    bool isMovingUp;
    bool isMovingDown;
    bool isMovingCloser;
    bool isMovingFurther;
    bool isRotatingX;
    bool isRotatingY;
    bool isRotatingZ;
    UserInput()
    {
        rotationX = 0.0f;
        rotationY = 0.0f;
        rotationZ = 0.0f;
        isMovingRight = false;
        isMovingLeft = false;
        isMovingUp = false;
        isMovingDown = false;
        isMovingCloser = false;
        isMovingFurther = false;
        isRotatingX = false;
        isRotatingY = false;
        isRotatingZ = false;
    }

    void UpdatePos()
    {
        //-1 and +1 from the origin of the cube (centre)
        vecMin.x = xPos - 1.0f;
        vecMax.x = xPos + 1.0f;
        vecMin.y = yPos - 1.0f;
        vecMax.y = yPos + 1.0f;
        vecMin.z = zPos - 1.0f;
        vecMax.z = zPos + 1.0f;
        vecMin.x = xPos - 1.0f;
        vecMax.x = xPos + 1.0f;
        vecMin.y = yPos - 1.0f;
        vecMax.y = yPos + 1.0f;
        vecMin.z = zPos - 1.0f;
        vecMax.z = zPos + 1.0f;
    }
};

边界框功能

bool AABBtoAABB(const UserInput& box1, const UserInput& box2)
{
    return(box1.vecMax.x > box2.vecMin.x &&
        box1.vecMin.x < box2.vecMax.x &&
        box1.vecMax.y > box2.vecMin.y &&
        box1.vecMin.y < box2.vecMax.y &&
        box1.vecMax.z > box2.vecMin.z &&
        box1.vecMin.z < box2.vecMax.z);
}

更新功能

void Update()
{
    AABBtoAABB(input[0], input[1]);
    input[0].UpdatePos();
    input[1].UpdatePos();
}

我似乎无法弄清楚如何使它们真正相互碰撞而不彼此通过。

0 个答案:

没有答案