aboutsummaryrefslogtreecommitdiff
path: root/PhysX_3.4/Source/LowLevel/common/src/pipeline/PxcContactMethodImpl.cpp
diff options
context:
space:
mode:
authorgit perforce import user <a@b>2016-10-25 12:29:14 -0600
committerSheikh Dawood Abdul Ajees <Sheikh Dawood Abdul Ajees>2016-10-25 18:56:37 -0500
commit3dfe2108cfab31ba3ee5527e217d0d8e99a51162 (patch)
treefa6485c169e50d7415a651bf838f5bcd0fd3bfbd /PhysX_3.4/Source/LowLevel/common/src/pipeline/PxcContactMethodImpl.cpp
downloadphysx-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 'PhysX_3.4/Source/LowLevel/common/src/pipeline/PxcContactMethodImpl.cpp')
-rw-r--r--PhysX_3.4/Source/LowLevel/common/src/pipeline/PxcContactMethodImpl.cpp279
1 files changed, 279 insertions, 0 deletions
diff --git a/PhysX_3.4/Source/LowLevel/common/src/pipeline/PxcContactMethodImpl.cpp b/PhysX_3.4/Source/LowLevel/common/src/pipeline/PxcContactMethodImpl.cpp
new file mode 100644
index 00000000..53eb5d88
--- /dev/null
+++ b/PhysX_3.4/Source/LowLevel/common/src/pipeline/PxcContactMethodImpl.cpp
@@ -0,0 +1,279 @@
+// This code contains NVIDIA Confidential Information and is disclosed to you
+// under a form of NVIDIA software license agreement provided separately to you.
+//
+// Notice
+// NVIDIA Corporation and its licensors retain all intellectual property and
+// proprietary rights in and to this software and related documentation and
+// any modifications thereto. Any use, reproduction, disclosure, or
+// distribution of this software and related documentation without an express
+// license agreement from NVIDIA Corporation is strictly prohibited.
+//
+// ALL NVIDIA DESIGN SPECIFICATIONS, CODE ARE PROVIDED "AS IS.". NVIDIA MAKES
+// NO WARRANTIES, EXPRESSED, IMPLIED, STATUTORY, OR OTHERWISE WITH RESPECT TO
+// THE MATERIALS, AND EXPRESSLY DISCLAIMS ALL IMPLIED WARRANTIES OF NONINFRINGEMENT,
+// MERCHANTABILITY, AND FITNESS FOR A PARTICULAR PURPOSE.
+//
+// Information and code furnished is believed to be accurate and reliable.
+// However, NVIDIA Corporation assumes no responsibility for the consequences of use of such
+// information or for any infringement of patents or other rights of third parties that may
+// result from its use. No license is granted by implication or otherwise under any patent
+// or patent rights of NVIDIA Corporation. Details are subject to change without notice.
+// This code supersedes and replaces all information previously supplied.
+// NVIDIA Corporation products are not authorized for use as critical
+// components in life support devices or systems without express written approval of
+// NVIDIA Corporation.
+//
+// Copyright (c) 2008-2016 NVIDIA Corporation. All rights reserved.
+// Copyright (c) 2004-2008 AGEIA Technologies, Inc. All rights reserved.
+// Copyright (c) 2001-2004 NovodeX AG. All rights reserved.
+
+
+#include "PxGeometry.h"
+#include "PxcContactMethodImpl.h"
+
+namespace physx
+{
+
+// PT: those prototypes shouldn't be public. Keep them here.
+
+// Sphere - other
+bool PxcContactSphereSphere (GU_CONTACT_METHOD_ARGS);
+bool PxcContactSpherePlane (GU_CONTACT_METHOD_ARGS);
+bool PxcContactSphereCapsule (GU_CONTACT_METHOD_ARGS);
+bool PxcContactSphereBox (GU_CONTACT_METHOD_ARGS);
+bool PxcContactSphereConvex (GU_CONTACT_METHOD_ARGS);
+bool PxcContactSphereMesh (GU_CONTACT_METHOD_ARGS);
+bool PxcContactSphereHeightField (GU_CONTACT_METHOD_ARGS);
+
+// Plane - other
+bool PxcContactPlaneCapsule (GU_CONTACT_METHOD_ARGS);
+bool PxcContactPlaneBox (GU_CONTACT_METHOD_ARGS);
+bool PxcContactPlaneConvex (GU_CONTACT_METHOD_ARGS);
+
+// Capsule - other
+bool PxcContactCapsuleCapsule (GU_CONTACT_METHOD_ARGS);
+bool PxcContactCapsuleBox (GU_CONTACT_METHOD_ARGS);
+bool PxcContactCapsuleConvex (GU_CONTACT_METHOD_ARGS);
+bool PxcContactCapsuleMesh (GU_CONTACT_METHOD_ARGS);
+bool PxcContactCapsuleHeightField (GU_CONTACT_METHOD_ARGS);
+
+// Box - other
+bool PxcContactBoxBox (GU_CONTACT_METHOD_ARGS);
+bool PxcContactBoxConvex (GU_CONTACT_METHOD_ARGS);
+bool PxcContactBoxMesh (GU_CONTACT_METHOD_ARGS);
+bool PxcContactBoxHeightField (GU_CONTACT_METHOD_ARGS);
+
+// Convex - other
+bool PxcContactConvexConvex (GU_CONTACT_METHOD_ARGS);
+bool PxcContactConvexMesh (GU_CONTACT_METHOD_ARGS);
+bool PxcContactConvexHeightField (GU_CONTACT_METHOD_ARGS);
+
+
+static bool PxcInvalidContactPair (CONTACT_METHOD_ARGS_UNUSED)
+{
+ return false;
+}
+
+//PCM Sphere - other
+bool PxcPCMContactSphereSphere (GU_CONTACT_METHOD_ARGS);
+bool PxcPCMContactSpherePlane (GU_CONTACT_METHOD_ARGS);
+bool PxcPCMContactSphereBox (GU_CONTACT_METHOD_ARGS);
+bool PxcPCMContactSphereCapsule (GU_CONTACT_METHOD_ARGS);
+bool PxcPCMContactSphereConvex (GU_CONTACT_METHOD_ARGS);
+bool PxcPCMContactSphereMesh (GU_CONTACT_METHOD_ARGS);
+bool PxcPCMContactSphereHeightField (GU_CONTACT_METHOD_ARGS);
+
+// Plane - other
+bool PxcPCMContactPlaneCapsule (GU_CONTACT_METHOD_ARGS);
+bool PxcPCMContactPlaneBox (GU_CONTACT_METHOD_ARGS);
+bool PxcPCMContactPlaneConvex (GU_CONTACT_METHOD_ARGS);
+
+//PCM Capsule - other
+bool PxcPCMContactCapsuleCapsule (GU_CONTACT_METHOD_ARGS);
+bool PxcPCMContactCapsuleBox (GU_CONTACT_METHOD_ARGS);
+bool PxcPCMContactCapsuleConvex (GU_CONTACT_METHOD_ARGS);
+bool PxcPCMContactCapsuleMesh (GU_CONTACT_METHOD_ARGS);
+bool PxcPCMContactCapsuleHeightField (GU_CONTACT_METHOD_ARGS);
+
+//PCM Box - other
+bool PxcPCMContactBoxBox (GU_CONTACT_METHOD_ARGS);
+bool PxcPCMContactBoxConvex (GU_CONTACT_METHOD_ARGS);
+bool PxcPCMContactBoxMesh (GU_CONTACT_METHOD_ARGS);
+bool PxcPCMContactBoxHeightField (GU_CONTACT_METHOD_ARGS);
+
+//PCM Convex
+bool PxcPCMContactConvexConvex (GU_CONTACT_METHOD_ARGS);
+bool PxcPCMContactConvexMesh (GU_CONTACT_METHOD_ARGS);
+bool PxcPCMContactConvexHeightField (GU_CONTACT_METHOD_ARGS);
+
+
+#define DYNAMIC_CONTACT_REGISTRATION(x) PxcInvalidContactPair
+//#define DYNAMIC_CONTACT_REGISTRATION(x) x
+
+//Table of contact methods for different shape-type combinations
+PxcContactMethod g_ContactMethodTable[][PxGeometryType::eGEOMETRY_COUNT] =
+{
+ //PxGeometryType::eSPHERE
+ {
+ PxcContactSphereSphere, //PxGeometryType::eSPHERE
+ PxcContactSpherePlane, //PxGeometryType::ePLANE
+ PxcContactSphereCapsule, //PxGeometryType::eCAPSULE
+ PxcContactSphereBox, //PxGeometryType::eBOX
+ PxcContactSphereConvex, //PxGeometryType::eCONVEXMESH
+ PxcContactSphereMesh, //PxGeometryType::eTRIANGLEMESH
+ DYNAMIC_CONTACT_REGISTRATION(PxcContactSphereHeightField), //PxGeometryType::eHEIGHTFIELD //TODO: make HF midphase that will mask this
+
+ },
+
+ //PxGeometryType::ePLANE
+ {
+ 0, //PxGeometryType::eSPHERE
+ PxcInvalidContactPair, //PxGeometryType::ePLANE
+ PxcContactPlaneCapsule, //PxGeometryType::eCAPSULE
+ PxcContactPlaneBox, //PxGeometryType::eBOX
+ PxcContactPlaneConvex, //PxGeometryType::eCONVEXMESH
+ PxcInvalidContactPair, //PxGeometryType::eTRIANGLEMESH
+ PxcInvalidContactPair, //PxGeometryType::eHEIGHTFIELD
+ },
+
+ //PxGeometryType::eCAPSULE
+ {
+ 0, //PxGeometryType::eSPHERE
+ 0, //PxGeometryType::ePLANE
+ PxcContactCapsuleCapsule, //PxGeometryType::eCAPSULE
+ PxcContactCapsuleBox, //PxGeometryType::eBOX
+ PxcContactCapsuleConvex, //PxGeometryType::eCONVEXMESH
+ PxcContactCapsuleMesh, //PxGeometryType::eTRIANGLEMESH
+ DYNAMIC_CONTACT_REGISTRATION(PxcContactCapsuleHeightField), //PxGeometryType::eHEIGHTFIELD //TODO: make HF midphase that will mask this
+ },
+
+ //PxGeometryType::eBOX
+ {
+ 0, //PxGeometryType::eSPHERE
+ 0, //PxGeometryType::ePLANE
+ 0, //PxGeometryType::eCAPSULE
+ PxcContactBoxBox, //PxGeometryType::eBOX
+ PxcContactBoxConvex, //PxGeometryType::eCONVEXMESH
+ PxcContactBoxMesh, //PxGeometryType::eTRIANGLEMESH
+ DYNAMIC_CONTACT_REGISTRATION(PxcContactBoxHeightField), //PxGeometryType::eHEIGHTFIELD //TODO: make HF midphase that will mask this
+ },
+
+ //PxGeometryType::eCONVEXMESH
+ {
+ 0, //PxGeometryType::eSPHERE
+ 0, //PxGeometryType::ePLANE
+ 0, //PxGeometryType::eCAPSULE
+ 0, //PxGeometryType::eBOX
+ PxcContactConvexConvex, //PxGeometryType::eCONVEXMESH
+ PxcContactConvexMesh, //PxGeometryType::eTRIANGLEMESH
+ DYNAMIC_CONTACT_REGISTRATION(PxcContactConvexHeightField), //PxGeometryType::eHEIGHTFIELD //TODO: make HF midphase that will mask this
+ },
+
+ //PxGeometryType::eTRIANGLEMESH
+ {
+ 0, //PxGeometryType::eSPHERE
+ 0, //PxGeometryType::ePLANE
+ 0, //PxGeometryType::eCAPSULE
+ 0, //PxGeometryType::eBOX
+ 0, //PxGeometryType::eCONVEXMESH
+ PxcInvalidContactPair, //PxGeometryType::eTRIANGLEMESH
+ PxcInvalidContactPair, //PxGeometryType::eHEIGHTFIELD
+ },
+
+ //PxGeometryType::eHEIGHTFIELD
+ {
+ 0, //PxGeometryType::eSPHERE
+ 0, //PxGeometryType::ePLANE
+ 0, //PxGeometryType::eCAPSULE
+ 0, //PxGeometryType::eBOX
+ 0, //PxGeometryType::eCONVEXMESH
+ 0, //PxGeometryType::eTRIANGLEMESH
+ PxcInvalidContactPair, //PxGeometryType::eHEIGHTFIELD
+ },
+};
+
+
+//#if PERSISTENT_CONTACT_MANIFOLD
+//Table of contact methods for different shape-type combinations
+PxcContactMethod g_PCMContactMethodTable[][PxGeometryType::eGEOMETRY_COUNT] =
+{
+ //PxGeometryType::eSPHERE
+ {
+ PxcPCMContactSphereSphere, //PxGeometryType::eSPHERE
+ PxcPCMContactSpherePlane, //PxGeometryType::ePLANE
+ PxcPCMContactSphereCapsule, //PxGeometryType::eCAPSULE
+ PxcPCMContactSphereBox, //PxGeometryType::eBOX
+ PxcPCMContactSphereConvex, //PxGeometryType::eCONVEXMESH
+ PxcPCMContactSphereMesh, //PxGeometryType::eTRIANGLEMESH
+ DYNAMIC_CONTACT_REGISTRATION(PxcPCMContactSphereHeightField), //PxGeometryType::eHEIGHTFIELD //TODO: make HF midphase that will mask this
+ },
+
+ //PxGeometryType::ePLANE
+ {
+ 0, //PxGeometryType::eSPHERE
+ PxcInvalidContactPair, //PxGeometryType::ePLANE
+ PxcPCMContactPlaneCapsule, //PxGeometryType::eCAPSULE
+ PxcPCMContactPlaneBox, //PxGeometryType::eBOX
+ PxcPCMContactPlaneConvex, //PxGeometryType::eCONVEXMESH
+ PxcInvalidContactPair, //PxGeometryType::eTRIANGLEMESH
+ PxcInvalidContactPair, //PxGeometryType::eHEIGHTFIELD
+ },
+
+ //PxGeometryType::eCAPSULE
+ {
+ 0, //PxGeometryType::eSPHERE
+ 0, //PxGeometryType::ePLANE
+ PxcPCMContactCapsuleCapsule, //PxGeometryType::eCAPSULE
+ PxcPCMContactCapsuleBox, //PxGeometryType::eBOX
+ PxcPCMContactCapsuleConvex, //PxGeometryType::eCONVEXMESH
+ PxcPCMContactCapsuleMesh, //PxGeometryType::eTRIANGLEMESH
+ DYNAMIC_CONTACT_REGISTRATION(PxcPCMContactCapsuleHeightField), //PxGeometryType::eHEIGHTFIELD //TODO: make HF midphase that will mask this
+ },
+
+ //PxGeometryType::eBOX
+ {
+ 0, //PxGeometryType::eSPHERE
+ 0, //PxGeometryType::ePLANE
+ 0, //PxGeometryType::eCAPSULE
+ PxcPCMContactBoxBox, //PxGeometryType::eBOX
+ PxcPCMContactBoxConvex, //PxGeometryType::eCONVEXMESH
+ PxcPCMContactBoxMesh, //PxGeometryType::eTRIANGLEMESH
+ DYNAMIC_CONTACT_REGISTRATION(PxcPCMContactBoxHeightField), //PxGeometryType::eHEIGHTFIELD //TODO: make HF midphase that will mask this
+
+ },
+
+ //PxGeometryType::eCONVEXMESH
+ {
+ 0, //PxGeometryType::eSPHERE
+ 0, //PxGeometryType::ePLANE
+ 0, //PxGeometryType::eCAPSULE
+ 0, //PxGeometryType::eBOX
+ PxcPCMContactConvexConvex, //PxGeometryType::eCONVEXMESH
+ PxcPCMContactConvexMesh, //PxGeometryType::eTRIANGLEMESH
+ DYNAMIC_CONTACT_REGISTRATION(PxcPCMContactConvexHeightField), //PxGeometryType::eHEIGHTFIELD //TODO: make HF midphase that will mask this
+ },
+
+ //PxGeometryType::eTRIANGLEMESH
+ {
+ 0, //PxGeometryType::eSPHERE
+ 0, //PxGeometryType::ePLANE
+ 0, //PxGeometryType::eCAPSULE
+ 0, //PxGeometryType::eBOX
+ 0, //PxGeometryType::eCONVEXMESH
+ PxcInvalidContactPair, //PxGeometryType::eTRIANGLEMESH
+ PxcInvalidContactPair, //PxGeometryType::eHEIGHTFIELD
+ },
+
+ //PxGeometryType::eHEIGHTFIELD
+ {
+ 0, //PxGeometryType::eSPHERE
+ 0, //PxGeometryType::ePLANE
+ 0, //PxGeometryType::eCAPSULE
+ 0, //PxGeometryType::eBOX
+ 0, //PxGeometryType::eCONVEXMESH
+ 0, //PxGeometryType::eTRIANGLEMESH
+ PxcInvalidContactPair, //PxGeometryType::eHEIGHTFIELD
+ },
+
+};
+}