#include "./MathConst.h" #include "./Vector3.h" #pragma once namespace CrossM{ namespace Math{ inline bool IsEquivalent(const float f1, const float f2, const float fEpsilon = F_EPSILON) { float d = f1 - f2; return (d < fEpsilon && d > -fEpsilon); } /*! Á¡ v °¡ boxMin, boxMax ¸¦ ÃÖ¼Ò/ÃÖ´ë Á¡À¸·Î °¡Áö´Â AABB ¿¡ Æ÷ÇԵǴÂÁö ¿©ºÎ¸¦ üũ Æ÷Ç﵃ °æ¿ì true, ±×·¸Áö ¾ÊÀ» °æ¿ì false ¹Ýȯ */ inline bool IsPointInAABB(const VECTOR3& vPoint, const VECTOR3& vAABBMin , const VECTOR3& vAABBMax) { if (vAABBMin.x <= vPoint.x && vPoint.x < vAABBMax.x && vAABBMin.y <= vPoint.y && vPoint.y < vAABBMax.y && vAABBMin.z <= vPoint.z && vPoint.z < vAABBMax.z) { return true; } return false; } /* f1Min ~ f1Max ±¸°£°ú f2Min ~ f2Max ±¸°£ÀÌ °ãÄ¡´ÂÁö üũ ´Ü, ¹Ýµå½Ã f1Min <= f1Max, f2Min <= f2Max ¿©¾ß ÇÑ´Ù */ inline bool IsRangeOverlap(float f1Min, float f1Max, float f2Min, float f2Max) { if (f1Min <= f2Max && f2Min <= f1Max) { return true; } return false; } // »ï°¢ÇüÀÌ AABB ¾È¿¡ ¿ÏÀüÈ÷ Æ÷ÇԵǴÂÁö ¿©ºÎ¸¦ È®ÀÎ bool IsTriangleInAabb(const VECTOR3& vAabbMin, const VECTOR3& vAabbMax, const VECTOR3& vTri0, const VECTOR3& vTri1, const VECTOR3& vTri2); // AABB ¿Í »ï°¢ÇüÀÇ intersection Å×½ºÆ® bool CheckAabbTriangleIntersection(const VECTOR3& vAabbMin, const VECTOR3& vAabbMax, const VECTOR3& vTri0, const VECTOR3& vTri1, const VECTOR3& vTri2); // AABB ¿Í AABB ÀÇ intersection Å×½ºÆ® bool CheckAabbAabbIntersection(const VECTOR3& vAabb1Min, const VECTOR3& vAabb1Max, const VECTOR3& vAabb2Min, const VECTOR3& vAabb2Max); // »ï°¢Çü/Sweeping Sphere Å×½ºÆ®¸¦ À§ÇÑ ÆÄ¶ó¹ÌÅÍ ±¸Á¶Ã¼ struct TriangSweepingSphere { Math::VECTOR3 m_vTri0; Math::VECTOR3 m_vTri1; Math::VECTOR3 m_vTri2; Math::VECTOR3 m_vSphereSweepStart; Math::VECTOR3 m_vSphereSweepPath; float m_fSphereRadius; }; // »ï°¢Çü°ú sweeping sphere ÀÇ Ãæµ¹ Å×½ºÆ®. Ãæµ¹ÀÏ °æ¿ì Ãæµ¹ÀÌ ÀϾ ÁöÁ¡µµ ¹ÝȯÇÑ´Ù bool CheckTriangleSweepingSphereCollision(float &fOutT, VECTOR3& vOutContactPoint, bool& bOutContactInsideTriangle, const TriangSweepingSphere& triAndSphere); // »ï°¢Çü ³»¿¡ Á¡ÀÌ Æ÷ÇԵǾîÀÖ´ÂÁö È®ÀÎ bool IsPointInTriangle(const VECTOR3& vPoint, const VECTOR3& vTri0, const VECTOR3& vTri1, const VECTOR3& vTri2); }} // Àӽÿë vector3 °è¿­°£ ÄÁ¹öÀü ÇÔ¼ö template void ConvVector3(CrossM::Math::VECTOR3& v, const _T& vOld) { v.SetValue(vOld.x, vOld.y, vOld.z); }