diff options
| author | git perforce import user <a@b> | 2016-10-25 12:29:14 -0600 |
|---|---|---|
| committer | Sheikh Dawood Abdul Ajees <Sheikh Dawood Abdul Ajees> | 2016-10-25 18:56:37 -0500 |
| commit | 3dfe2108cfab31ba3ee5527e217d0d8e99a51162 (patch) | |
| tree | fa6485c169e50d7415a651bf838f5bcd0fd3bfbd /APEX_1.4/shared/general/HACD/include/dgIntersections.h | |
| download | physx-3.4-3dfe2108cfab31ba3ee5527e217d0d8e99a51162.tar.xz physx-3.4-3dfe2108cfab31ba3ee5527e217d0d8e99a51162.zip | |
Initial commit:
PhysX 3.4.0 Update @ 21294896
APEX 1.4.0 Update @ 21275617
[CL 21300167]
Diffstat (limited to 'APEX_1.4/shared/general/HACD/include/dgIntersections.h')
| -rw-r--r-- | APEX_1.4/shared/general/HACD/include/dgIntersections.h | 159 |
1 files changed, 159 insertions, 0 deletions
diff --git a/APEX_1.4/shared/general/HACD/include/dgIntersections.h b/APEX_1.4/shared/general/HACD/include/dgIntersections.h new file mode 100644 index 00000000..55fc1b3b --- /dev/null +++ b/APEX_1.4/shared/general/HACD/include/dgIntersections.h @@ -0,0 +1,159 @@ +/* Copyright (c) <2003-2011> <Julio Jerez, Newton Game Dynamics> +* +* This software is provided 'as-is', without any express or implied +* warranty. In no event will the authors be held liable for any damages +* arising from the use of this software. +* +* Permission is granted to anyone to use this software for any purpose, +* including commercial applications, and to alter it and redistribute it +* freely, subject to the following restrictions: +* +* 1. The origin of this software must not be misrepresented; you must not +* claim that you wrote the original software. If you use this software +* in a product, an acknowledgment in the product documentation would be +* appreciated but is not required. +* +* 2. Altered source versions must be plainly marked as such, and must not be +* misrepresented as being the original software. +* +* 3. This notice may not be removed or altered from any source distribution. +*/ + +#ifndef __dgIntersections__ +#define __dgIntersections__ + +#include "dgTypes.h" +#include "dgVector.h" + + +class dgPlane; +class dgObject; +class dgPolyhedra; + +class dgFastRayTest +{ + public: + dgFastRayTest(const dgVector& l0, const dgVector& l1); + + int32_t BoxTest (const dgVector& minBox, const dgVector& maxBox) const; + + float PolygonIntersect (const dgVector& normal, const float* const polygon, int32_t strideInBytes, const int32_t* const indexArray, int32_t indexCount) const; + + void Reset (float t) + { + m_dpInv = m_dpBaseInv.Scale (float (1.0f) / t); + } + + dgVector m_p0; + dgVector m_p1; + dgVector m_diff; + dgVector m_dpInv; + dgVector m_dpBaseInv; + dgVector m_minT; + dgVector m_maxT; + + dgVector m_tolerance; + dgVector m_zero; + int32_t m_isParallel[4]; + + float m_dirError; +}; + + + +enum dgIntersectStatus +{ + t_StopSearh, + t_ContinueSearh +}; + +typedef dgIntersectStatus (*dgAABBIntersectCallback) (void *context, + const float* const polygon, int32_t strideInBytes, + const int32_t* const indexArray, int32_t indexCount); + +typedef float (*dgRayIntersectCallback) (void *context, + const float* const polygon, int32_t strideInBytes, + const int32_t* const indexArray, int32_t indexCount); + + +class dgBeamHitStruct +{ + public: + dgVector m_Origin; + dgVector m_NormalOut; + dgObject* m_HitObjectOut; + float m_ParametricIntersctionOut; +}; + + +bool dgRayBoxClip(dgVector& ray_p0, dgVector& ray_p1, const dgVector& boxP0, const dgVector& boxP1); + +dgVector dgPointToRayDistance(const dgVector& point, const dgVector& ray_p0, const dgVector& ray_p1); + +void dgRayToRayDistance (const dgVector& ray_p0, + const dgVector& ray_p1, + const dgVector& ray_q0, + const dgVector& ray_q1, + dgVector& p0Out, + dgVector& p1Out); + +dgVector dgPointToTriangleDistance (const dgVector& point, const dgVector& p0, const dgVector& p1, const dgVector& p2); +dgBigVector dgPointToTriangleDistance (const dgBigVector& point, const dgBigVector& p0, const dgBigVector& p1, const dgBigVector& p2); + +bool dgPointToPolygonDistance (const dgVector& point, const float* const polygon, int32_t strideInInBytes, + const int32_t* const indexArray, int32_t indexCount, float bailOutDistance, dgVector& pointOut); + + +/* +int32_t dgConvexPolyhedraToPlaneIntersection ( + const dgPolyhedra& convexPolyhedra, + const float polyhedraVertexArray[], + int polyhedraVertexStrideInBytes, + const dgPlane& plane, + dgVector* intersectionOut, + int32_t maxSize); + + +int32_t ConvecxPolygonToConvexPolygonIntersection ( + int32_t polygonIndexCount_1, + const int32_t polygonIndexArray_1[], + int32_t convexPolygonStrideInBytes_1, + const float convexPolygonVertex_1[], + int32_t polygonIndexCount_2, + const int32_t polygonIndexArray_2[], + int32_t convexPolygonStrideInBytes_2, + const float convexPolygonVertex_2[], + dgVector* intersectionOut, + int32_t maxSize); + + +int32_t dgConvexIntersection (const dgVector convexPolyA[], int32_t countA, + const dgVector convexPolyB[], int32_t countB, + dgVector output[]); + +*/ + + +HACD_FORCE_INLINE int32_t dgOverlapTest (const dgVector& p0, const dgVector& p1, const dgVector& q0, const dgVector& q1) +{ + return ((p0.m_x < q1.m_x) && (p1.m_x > q0.m_x) && (p0.m_z < q1.m_z) && (p1.m_z > q0.m_z) && (p0.m_y < q1.m_y) && (p1.m_y > q0.m_y)); +} + + +HACD_FORCE_INLINE int32_t dgBoxInclusionTest (const dgVector& p0, const dgVector& p1, const dgVector& q0, const dgVector& q1) +{ + return (p0.m_x >= q0.m_x) && (p0.m_y >= q0.m_y) && (p0.m_z >= q0.m_z) && (p1.m_x <= q1.m_x) && (p1.m_y <= q1.m_y) && (p1.m_z <= q1.m_z); +} + + +HACD_FORCE_INLINE int32_t dgCompareBox (const dgVector& p0, const dgVector& p1, const dgVector& q0, const dgVector& q1) +{ + return (p0.m_x != q0.m_x) || (p0.m_y != q0.m_y) || (p0.m_z != q0.m_z) || (p1.m_x != q1.m_x) || (p1.m_y != q1.m_y) || (p1.m_z != q1.m_z); +} + + + +dgBigVector LineTriangleIntersection (const dgBigVector& l0, const dgBigVector& l1, const dgBigVector& A, const dgBigVector& B, const dgBigVector& C); + +#endif + |