RavEngine
Loading...
Searching...
No Matches
GuMTD.h
1// Redistribution and use in source and binary forms, with or without
2// modification, are permitted provided that the following conditions
3// are met:
4// * Redistributions of source code must retain the above copyright
5// notice, this list of conditions and the following disclaimer.
6// * Redistributions in binary form must reproduce the above copyright
7// notice, this list of conditions and the following disclaimer in the
8// documentation and/or other materials provided with the distribution.
9// * Neither the name of NVIDIA CORPORATION nor the names of its
10// contributors may be used to endorse or promote products derived
11// from this software without specific prior written permission.
12//
13// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
14// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
17// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24//
25// Copyright (c) 2008-2022 NVIDIA Corporation. All rights reserved.
26// Copyright (c) 2004-2008 AGEIA Technologies, Inc. All rights reserved.
27// Copyright (c) 2001-2004 NovodeX AG. All rights reserved.
28
29#ifndef GU_MTD_H
30#define GU_MTD_H
31
32#include "foundation/PxVec3.h"
33#include "geometry/PxGeometry.h"
34
35namespace physx
36{
37namespace Gu
38{
39 // PT: we use a define to be able to quickly change the signature of all MTD functions.
40 // (this also ensures they all use consistent names for passed parameters).
41 // \param[out] mtd computed depenetration dir
42 // \param[out] depth computed depenetration depth
43 // \param[in] geom0 first geometry object
44 // \param[in] pose0 pose of first geometry object
45 // \param[in] geom1 second geometry object
46 // \param[in] pose1 pose of second geometry object
47 // \param[in] cache optional cached data for triggers
48 #define GU_MTD_FUNC_PARAMS PxVec3& mtd, PxF32& depth, \
49 const PxGeometry& geom0, const PxTransform& pose0, \
50 const PxGeometry& geom1, const PxTransform& pose1
51
52 // PT: function pointer for Geom-indexed MTD functions
53 // See GU_MTD_FUNC_PARAMS for function parameters details.
54 // \return true if an overlap was found, false otherwise
55 // \note depenetration vector D is equal to mtd * depth. It should be applied to the 1st object, to get out of the 2nd object.
56 typedef bool (*GeomMTDFunc) (GU_MTD_FUNC_PARAMS);
57
58 PX_FORCE_INLINE PxF32 manualNormalize(PxVec3& mtd, const PxVec3& normal, PxReal lenSq)
59 {
60 const PxF32 len = PxSqrt(lenSq);
61
62 // We do a *manual* normalization to check for singularity condition
63 if(lenSq < 1e-6f)
64 mtd = PxVec3(1.0f, 0.0f, 0.0f); // PT: zero normal => pick up random one
65 else
66 mtd = normal * 1.0f / len;
67
68 return len;
69 }
70}
71}
72
73#endif
#define PX_FORCE_INLINE
Definition PxPreprocessor.h:335
Sorts an array of objects in ascending order, assuming that the predicate implements the < operator:
Definition PxBoxController.h:39
PX_CUDA_CALLABLE PX_FORCE_INLINE float PxSqrt(float a)
Square root.
Definition PxMath.h:146