Added stub functions for collision detection algorithms
This commit is contained in:
parent
8ead885d0d
commit
ea1dd57996
|
@ -0,0 +1,35 @@
|
||||||
|
/****************************************************************************************
|
||||||
|
* \file SHCapsuleVsCapsule.cpp
|
||||||
|
* \author Diren D Bharwani, diren.dbharwani, 390002520
|
||||||
|
* \brief Implementation for the Detecting Collisions between two capsules
|
||||||
|
*
|
||||||
|
* \copyright Copyright (C) 2022 DigiPen Institute of Technology. Reproduction or
|
||||||
|
* disclosure of this file or its contents without the prior written consent
|
||||||
|
* of DigiPen Institute of Technology is prohibited.
|
||||||
|
****************************************************************************************/
|
||||||
|
|
||||||
|
#include <SHpch.h>
|
||||||
|
|
||||||
|
// Primary Header
|
||||||
|
#include "SHCollision.h"
|
||||||
|
|
||||||
|
// Project Headers
|
||||||
|
#include "Math/SHMathHelpers.h"
|
||||||
|
|
||||||
|
namespace SHADE
|
||||||
|
{
|
||||||
|
/*-----------------------------------------------------------------------------------*/
|
||||||
|
/* Public Member Functions Definitions */
|
||||||
|
/*-----------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
bool SHCollision::CapsuleVsCapsule(const SHCollisionShape& A, const SHCollisionShape& B) noexcept
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool SHCollision::CapsuleVsCapsule(SHManifold& manifold, const SHCollisionShape& A, const SHCollisionShape& B) noexcept
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace SHADE
|
|
@ -0,0 +1,49 @@
|
||||||
|
/****************************************************************************************
|
||||||
|
* \file SHCapsuleVsConvex.cpp
|
||||||
|
* \author Diren D Bharwani, diren.dbharwani, 390002520
|
||||||
|
* \brief Implementation for the Detecting Collisions between a capsule and a convex
|
||||||
|
* polyhedron.
|
||||||
|
*
|
||||||
|
* \copyright Copyright (C) 2022 DigiPen Institute of Technology. Reproduction or
|
||||||
|
* disclosure of this file or its contents without the prior written consent
|
||||||
|
* of DigiPen Institute of Technology is prohibited.
|
||||||
|
****************************************************************************************/
|
||||||
|
|
||||||
|
#include <SHpch.h>
|
||||||
|
|
||||||
|
// Primary Header
|
||||||
|
#include "SHCollision.h"
|
||||||
|
|
||||||
|
// Project Headers
|
||||||
|
#include "Math/SHMathHelpers.h"
|
||||||
|
#include "Physics/Collision/CollisionShapes/SHBoxCollisionShape.h"
|
||||||
|
|
||||||
|
// TODO
|
||||||
|
|
||||||
|
namespace SHADE
|
||||||
|
{
|
||||||
|
/*-----------------------------------------------------------------------------------*/
|
||||||
|
/* Public Member Functions Definitions */
|
||||||
|
/*-----------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
bool SHCollision::CapsuleVsConvex(const SHCollisionShape& A, const SHCollisionShape& B) noexcept
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool SHCollision::ConvexVsCapsule(const SHCollisionShape& A, const SHCollisionShape& B) noexcept
|
||||||
|
{
|
||||||
|
return CapsuleVsConvex(B, A);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool SHCollision::CapsuleVsConvex(SHManifold& manifold, const SHCollisionShape& A, const SHCollisionShape& B) noexcept
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool SHCollision::ConvexVsCapsule(SHManifold& manifold, const SHCollisionShape& A, const SHCollisionShape& B) noexcept
|
||||||
|
{
|
||||||
|
return CapsuleVsConvex(manifold, B, A);
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace SHADE
|
|
@ -38,15 +38,56 @@ namespace SHADE
|
||||||
[[nodiscard]] static bool SphereVsSphere (const SHCollisionShape& A, const SHCollisionShape& B) noexcept;
|
[[nodiscard]] static bool SphereVsSphere (const SHCollisionShape& A, const SHCollisionShape& B) noexcept;
|
||||||
[[nodiscard]] static bool SphereVsSphere (SHManifold& manifold, const SHCollisionShape& A, const SHCollisionShape& B) noexcept;
|
[[nodiscard]] static bool SphereVsSphere (SHManifold& manifold, const SHCollisionShape& A, const SHCollisionShape& B) noexcept;
|
||||||
|
|
||||||
|
[[nodiscard]] static bool SphereVsCapsule (const SHCollisionShape& A, const SHCollisionShape& B) noexcept;
|
||||||
|
[[nodiscard]] static bool SphereVsCapsule (SHManifold& manifold, const SHCollisionShape& A, const SHCollisionShape& B) noexcept;
|
||||||
|
|
||||||
|
[[nodiscard]] static bool SphereVsConvex (const SHCollisionShape& A, const SHCollisionShape& B) noexcept;
|
||||||
|
[[nodiscard]] static bool SphereVsConvex (SHManifold& manifold, const SHCollisionShape& A, const SHCollisionShape& B) noexcept;
|
||||||
|
|
||||||
/* Capsule VS X */
|
/* Capsule VS X */
|
||||||
|
|
||||||
|
[[nodiscard]] static bool CapsuleVsSphere (const SHCollisionShape& A, const SHCollisionShape& B) noexcept;
|
||||||
|
[[nodiscard]] static bool CapsuleVsSphere (SHManifold& manifold, const SHCollisionShape& A, const SHCollisionShape& B) noexcept;
|
||||||
|
|
||||||
|
[[nodiscard]] static bool CapsuleVsCapsule (const SHCollisionShape& A, const SHCollisionShape& B) noexcept;
|
||||||
|
[[nodiscard]] static bool CapsuleVsCapsule (SHManifold& manifold, const SHCollisionShape& A, const SHCollisionShape& B) noexcept;
|
||||||
|
|
||||||
|
[[nodiscard]] static bool CapsuleVsConvex (const SHCollisionShape& A, const SHCollisionShape& B) noexcept;
|
||||||
|
[[nodiscard]] static bool CapsuleVsConvex (SHManifold& manifold, const SHCollisionShape& A, const SHCollisionShape& B) noexcept;
|
||||||
|
|
||||||
/* Polygon VS X */
|
/* Polygon VS X */
|
||||||
|
|
||||||
|
[[nodiscard]] static bool ConvexVsSphere (const SHCollisionShape& A, const SHCollisionShape& B) noexcept;
|
||||||
|
[[nodiscard]] static bool ConvexVsSphere (SHManifold& manifold, const SHCollisionShape& A, const SHCollisionShape& B) noexcept;
|
||||||
|
|
||||||
|
[[nodiscard]] static bool ConvexVsCapsule (const SHCollisionShape& A, const SHCollisionShape& B) noexcept;
|
||||||
|
[[nodiscard]] static bool ConvexVsCapsule (SHManifold& manifold, const SHCollisionShape& A, const SHCollisionShape& B) noexcept;
|
||||||
|
|
||||||
|
[[nodiscard]] static bool ConvexVsConvex (const SHCollisionShape& A, const SHCollisionShape& B) noexcept;
|
||||||
|
[[nodiscard]] static bool ConvexVsConvex (SHManifold& manifold, const SHCollisionShape& A, const SHCollisionShape& B) noexcept;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
/*---------------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------------*/
|
||||||
/* Member Functions */
|
/* Member Functions */
|
||||||
/*---------------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
static bool isMinkowskiFace(const SHVec3& a, const SHVec3& b, const SHVec3& c, const SHVec3& d) noexcept;
|
||||||
|
|
||||||
|
// TODO: buildMinkowskiFace, queryEdgeDirection, distanceBetweenTwoEdges,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* TODO:
|
||||||
|
* static FaceQuery queryFaceDirections (const SHCollisionShape& A, const SHCollisionShape& B) noexcept;
|
||||||
|
* static EdgeQuery queryEdgeDirections (const SHCollisionShape& A, const SHCollisionShape& B) noexcept;
|
||||||
|
* static bool buildMinkowskiFace (const SHHalfEdge& edgeA, const SHHalfEdge& edgeB) noexcept;
|
||||||
|
* static float distanceBetweenEdges(const SHHalfEdge& edgeA, const SHHalfEdge& edgeB, SHCollisionShape& poly) noexcept;
|
||||||
|
* static uint32_t clip
|
||||||
|
*
|
||||||
|
* ! References
|
||||||
|
* https://ia801303.us.archive.org/30/items/GDC2013Gregorius/GDC2013-Gregorius.pdf
|
||||||
|
* https://github.com/RandyGaul/qu3e/blob/master/src/collision/q3Collide.cpp
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
};
|
};
|
||||||
} // namespace SHADE
|
} // namespace SHADE
|
|
@ -26,22 +26,20 @@ namespace SHADE
|
||||||
|
|
||||||
const SHCollisionDispatcher::ManifoldCollide SHCollisionDispatcher::manifoldCollide[NUM_SHAPES][NUM_SHAPES]
|
const SHCollisionDispatcher::ManifoldCollide SHCollisionDispatcher::manifoldCollide[NUM_SHAPES][NUM_SHAPES]
|
||||||
{
|
{
|
||||||
// TODO
|
|
||||||
// <SHAPE> vs Sphere / Box / Capsule
|
// <SHAPE> vs Sphere / Box / Capsule
|
||||||
|
|
||||||
{ SHCollision::SphereVsSphere, nullptr, nullptr } // Sphere
|
{ SHCollision::SphereVsSphere, SHCollision::SphereVsConvex, SHCollision::SphereVsCapsule } // Sphere
|
||||||
, { nullptr, nullptr, nullptr } // Box
|
, { SHCollision::ConvexVsSphere, SHCollision::ConvexVsConvex, SHCollision::ConvexVsCapsule } // Box
|
||||||
, { nullptr, nullptr, nullptr } // Capsule
|
, { SHCollision::CapsuleVsSphere, SHCollision::CapsuleVsConvex, SHCollision::CapsuleVsCapsule } // Capsule
|
||||||
};
|
};
|
||||||
|
|
||||||
const SHCollisionDispatcher::TriggerCollide SHCollisionDispatcher::triggerCollide[NUM_SHAPES][NUM_SHAPES]
|
const SHCollisionDispatcher::TriggerCollide SHCollisionDispatcher::triggerCollide[NUM_SHAPES][NUM_SHAPES]
|
||||||
{
|
{
|
||||||
// TODO
|
|
||||||
// <SHAPE> vs Sphere / Box / Capsule
|
// <SHAPE> vs Sphere / Box / Capsule
|
||||||
|
|
||||||
{ SHCollision::SphereVsSphere, nullptr, nullptr } // Sphere
|
{ SHCollision::SphereVsSphere, SHCollision::SphereVsConvex, SHCollision::SphereVsCapsule } // Sphere
|
||||||
, { nullptr, nullptr, nullptr } // Box
|
, { SHCollision::ConvexVsSphere, SHCollision::ConvexVsConvex, SHCollision::ConvexVsCapsule } // Box
|
||||||
, { nullptr, nullptr, nullptr } // Capsule
|
, { SHCollision::CapsuleVsSphere, SHCollision::CapsuleVsConvex, SHCollision::CapsuleVsCapsule } // Capsule
|
||||||
};
|
};
|
||||||
|
|
||||||
const bool SHCollisionDispatcher::collisionTable[NUM_TYPES][NUM_TYPES]
|
const bool SHCollisionDispatcher::collisionTable[NUM_TYPES][NUM_TYPES]
|
||||||
|
|
|
@ -0,0 +1,62 @@
|
||||||
|
/****************************************************************************************
|
||||||
|
* \file SHConvexVsConvex.cpp
|
||||||
|
* \author Diren D Bharwani, diren.dbharwani, 390002520
|
||||||
|
* \brief Implementation for the Detecting Collisions between two convex polyhedrons.
|
||||||
|
*
|
||||||
|
* \copyright Copyright (C) 2022 DigiPen Institute of Technology. Reproduction or
|
||||||
|
* disclosure of this file or its contents without the prior written consent
|
||||||
|
* of DigiPen Institute of Technology is prohibited.
|
||||||
|
****************************************************************************************/
|
||||||
|
|
||||||
|
#include <SHpch.h>
|
||||||
|
|
||||||
|
// Primary Header
|
||||||
|
#include "SHCollision.h"
|
||||||
|
|
||||||
|
// Project Headers
|
||||||
|
#include "Math/SHMathHelpers.h"
|
||||||
|
|
||||||
|
namespace SHADE
|
||||||
|
{
|
||||||
|
/*-----------------------------------------------------------------------------------*/
|
||||||
|
/* Public Member Functions Definitions */
|
||||||
|
/*-----------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
bool SHCollision::ConvexVsConvex(const SHCollisionShape& A, const SHCollisionShape& B) noexcept
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* TODO:
|
||||||
|
*
|
||||||
|
* 1. Query face directiosn of a to b. Exit early if separation found.
|
||||||
|
* 2. query face directions of b to a. Exit early if separation found.
|
||||||
|
* 3. Query edge directions of a & b. Exit early if separation found.
|
||||||
|
*/
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool SHCollision::ConvexVsConvex(SHManifold& manifold, const SHCollisionShape& A, const SHCollisionShape& B) noexcept
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* TODO:
|
||||||
|
*
|
||||||
|
* 1. Query face directions of a to b. Exit early if separation found.
|
||||||
|
* 2. Query face directions of b to a. Exit early if separation found.
|
||||||
|
* 3. Query edge directions of a & b. Exit early if separation found.
|
||||||
|
*
|
||||||
|
* (*)!! Apply weight to improve frame coherence of normal directions. DONT FORGET FLIP FLOP!
|
||||||
|
* 4. From above, save the axis of minimum penetration (reference face)
|
||||||
|
* 5. Find the most anti-parallel face on other shape (incident face)
|
||||||
|
* 6. Clip incident face against side planes of reference face. (Sutherland-Hodgeman Clipping).
|
||||||
|
* Keep all vertices below reference face.
|
||||||
|
* 7. Reduce manifold to 4 contact points. We only need 4 contact points for a stable manifold.
|
||||||
|
*
|
||||||
|
* Remember to save IDs in queries.
|
||||||
|
* During generation of incident face, store IDs of face.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace SHADE
|
|
@ -0,0 +1,48 @@
|
||||||
|
/****************************************************************************************
|
||||||
|
* \file SHSphereVsCapsule.cpp
|
||||||
|
* \author Diren D Bharwani, diren.dbharwani, 390002520
|
||||||
|
* \brief Implementation for the Detecting Collisions between a sphere and a capsule.
|
||||||
|
*
|
||||||
|
* \copyright Copyright (C) 2022 DigiPen Institute of Technology. Reproduction or
|
||||||
|
* disclosure of this file or its contents without the prior written consent
|
||||||
|
* of DigiPen Institute of Technology is prohibited.
|
||||||
|
****************************************************************************************/
|
||||||
|
|
||||||
|
#include <SHpch.h>
|
||||||
|
|
||||||
|
// Primary Header
|
||||||
|
#include "SHCollision.h"
|
||||||
|
|
||||||
|
// Project Headers
|
||||||
|
#include "Math/SHMathHelpers.h"
|
||||||
|
#include "Physics/Collision/CollisionShapes/SHSphereCollisionShape.h"
|
||||||
|
|
||||||
|
// TODO
|
||||||
|
|
||||||
|
namespace SHADE
|
||||||
|
{
|
||||||
|
/*-----------------------------------------------------------------------------------*/
|
||||||
|
/* Public Member Functions Definitions */
|
||||||
|
/*-----------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
bool SHCollision::SphereVsCapsule(const SHCollisionShape& A, const SHCollisionShape& B) noexcept
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool SHCollision::CapsuleVsSphere(const SHCollisionShape& A, const SHCollisionShape& B) noexcept
|
||||||
|
{
|
||||||
|
return SphereVsCapsule(B, A);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool SHCollision::SphereVsCapsule(SHManifold& manifold, const SHCollisionShape& A, const SHCollisionShape& B) noexcept
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool SHCollision::CapsuleVsSphere(SHManifold& manifold, const SHCollisionShape& A, const SHCollisionShape& B) noexcept
|
||||||
|
{
|
||||||
|
return SphereVsCapsule(manifold, B, A);
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace SHADE
|
|
@ -0,0 +1,58 @@
|
||||||
|
/****************************************************************************************
|
||||||
|
* \file SHSphereVsConvex.cpp
|
||||||
|
* \author Diren D Bharwani, diren.dbharwani, 390002520
|
||||||
|
* \brief Implementation for the Detecting Collisions between a sphere and a convex
|
||||||
|
* polyhedron.
|
||||||
|
*
|
||||||
|
* \copyright Copyright (C) 2022 DigiPen Institute of Technology. Reproduction or
|
||||||
|
* disclosure of this file or its contents without the prior written consent
|
||||||
|
* of DigiPen Institute of Technology is prohibited.
|
||||||
|
****************************************************************************************/
|
||||||
|
|
||||||
|
#include <SHpch.h>
|
||||||
|
|
||||||
|
// Primary Header
|
||||||
|
#include "SHCollision.h"
|
||||||
|
|
||||||
|
// Project Headers
|
||||||
|
#include "Math/SHMathHelpers.h"
|
||||||
|
#include "Physics/Collision/CollisionShapes/SHCollisionShape.h"
|
||||||
|
#include "Physics/Collision/CollisionShapes/SHBoxCollisionShape.h"
|
||||||
|
|
||||||
|
// When testing against convex polyhedrons, we do not care so much as whether it is a box
|
||||||
|
// or something else. We only need the vertices to build half edge structures for use
|
||||||
|
// with a gauss map. Regardless, we still cast it to the type just to get vertices
|
||||||
|
// since spheres and capsules do not implement the same method.
|
||||||
|
|
||||||
|
// I did consider having another base class that encapsulates methods that convex polyhedrons
|
||||||
|
// would implement, but for the sake of my sanity, I won't do that.
|
||||||
|
|
||||||
|
// TODO
|
||||||
|
|
||||||
|
namespace SHADE
|
||||||
|
{
|
||||||
|
/*-----------------------------------------------------------------------------------*/
|
||||||
|
/* Public Member Functions Definitions */
|
||||||
|
/*-----------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
bool SHCollision::SphereVsConvex(const SHCollisionShape& A, const SHCollisionShape& B) noexcept
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool SHCollision::ConvexVsSphere(const SHCollisionShape& A, const SHCollisionShape& B) noexcept
|
||||||
|
{
|
||||||
|
return SphereVsConvex(B, A);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool SHCollision::SphereVsConvex(SHManifold& manifold, const SHCollisionShape& A, const SHCollisionShape& B) noexcept
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool SHCollision::ConvexVsSphere(SHManifold& manifold, const SHCollisionShape& A, const SHCollisionShape& B) noexcept
|
||||||
|
{
|
||||||
|
return SphereVsConvex(manifold, B, A);
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace SHADE
|
Loading…
Reference in New Issue