我正在尝试使用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();
}
我似乎无法弄清楚如何使它们真正相互碰撞而不彼此通过。