00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 #ifndef PXFOUNDATION_PXPLANE_H
00031 #define PXFOUNDATION_PXPLANE_H
00032
00037 #include "foundation/PxMath.h"
00038 #include "foundation/PxVec3.h"
00039
00040 #if !PX_DOXYGEN
00041 namespace physx
00042 {
00043 #endif
00044
00050 class PxPlane
00051 {
00052 public:
00056 PX_CUDA_CALLABLE PX_FORCE_INLINE PxPlane()
00057 {
00058 }
00059
00063 PX_CUDA_CALLABLE PX_FORCE_INLINE PxPlane(float nx, float ny, float nz, float distance) : n(nx, ny, nz), d(distance)
00064 {
00065 }
00066
00070 PX_CUDA_CALLABLE PX_FORCE_INLINE PxPlane(const PxVec3& normal, float distance) : n(normal), d(distance)
00071 {
00072 }
00073
00077 PX_CUDA_CALLABLE PX_FORCE_INLINE PxPlane(const PxVec3& point, const PxVec3& normal)
00078 : n(normal), d(-point.dot(n))
00079 {
00080 }
00081
00085 PX_CUDA_CALLABLE PX_FORCE_INLINE PxPlane(const PxVec3& p0, const PxVec3& p1, const PxVec3& p2)
00086 {
00087 n = (p1 - p0).cross(p2 - p0).getNormalized();
00088 d = -p0.dot(n);
00089 }
00090
00094 PX_CUDA_CALLABLE PX_INLINE bool operator==(const PxPlane& p) const
00095 {
00096 return n == p.n && d == p.d;
00097 }
00098
00099 PX_CUDA_CALLABLE PX_FORCE_INLINE float distance(const PxVec3& p) const
00100 {
00101 return p.dot(n) + d;
00102 }
00103
00104 PX_CUDA_CALLABLE PX_FORCE_INLINE bool contains(const PxVec3& p) const
00105 {
00106 return PxAbs(distance(p)) < (1.0e-7f);
00107 }
00108
00112 PX_CUDA_CALLABLE PX_FORCE_INLINE PxVec3 project(const PxVec3& p) const
00113 {
00114 return p - n * distance(p);
00115 }
00116
00120 PX_CUDA_CALLABLE PX_FORCE_INLINE PxVec3 pointInPlane() const
00121 {
00122 return -n * d;
00123 }
00124
00129 PX_CUDA_CALLABLE PX_FORCE_INLINE void normalize()
00130 {
00131 float denom = 1.0f / n.magnitude();
00132 n *= denom;
00133 d *= denom;
00134 }
00135
00136 PxVec3 n;
00137 float d;
00138 };
00139
00140 #if !PX_DOXYGEN
00141 }
00142 #endif
00143
00145 #endif // #ifndef PXFOUNDATION_PXPLANE_H