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
00031 #ifndef PX_PHYSICS_NX_HEIGHTFIELD_GEOMETRY
00032 #define PX_PHYSICS_NX_HEIGHTFIELD_GEOMETRY
00033
00036 #include "geometry/PxTriangleMeshGeometry.h"
00037 #include "common/PxCoreUtilityTypes.h"
00038
00039 #if !PX_DOXYGEN
00040 namespace physx
00041 {
00042 #endif
00043
00044 #define PX_MIN_HEIGHTFIELD_XZ_SCALE 1e-8f
00045 #define PX_MIN_HEIGHTFIELD_Y_SCALE (0.0001f / PxReal(0xFFFF))
00046
00047 class PxHeightField;
00048
00056 class PxHeightFieldGeometry : public PxGeometry
00057 {
00058 public:
00059 PX_INLINE PxHeightFieldGeometry() :
00060 PxGeometry (PxGeometryType::eHEIGHTFIELD),
00061 heightField (NULL),
00062 heightScale (1.0f),
00063 rowScale (1.0f),
00064 columnScale (1.0f),
00065 heightFieldFlags(0)
00066 {}
00067
00068 PX_INLINE PxHeightFieldGeometry(PxHeightField* hf,
00069 PxMeshGeometryFlags flags,
00070 PxReal heightScale_,
00071 PxReal rowScale_,
00072 PxReal columnScale_) :
00073 PxGeometry (PxGeometryType::eHEIGHTFIELD),
00074 heightField (hf) ,
00075 heightScale (heightScale_),
00076 rowScale (rowScale_),
00077 columnScale (columnScale_),
00078 heightFieldFlags (flags)
00079 {
00080 }
00081
00092 PX_INLINE bool isValid() const;
00093
00094 public:
00098 PxHeightField* heightField;
00099
00103 PxReal heightScale;
00104
00108 PxReal rowScale;
00109
00113 PxReal columnScale;
00114
00118 PxMeshGeometryFlags heightFieldFlags;
00119
00120 PxPadding<3> paddingFromFlags;
00121 };
00122
00123
00124 PX_INLINE bool PxHeightFieldGeometry::isValid() const
00125 {
00126 if (mType != PxGeometryType::eHEIGHTFIELD)
00127 return false;
00128 if (!PxIsFinite(heightScale) || !PxIsFinite(rowScale) || !PxIsFinite(columnScale))
00129 return false;
00130 if (rowScale < PX_MIN_HEIGHTFIELD_XZ_SCALE || columnScale < PX_MIN_HEIGHTFIELD_XZ_SCALE || heightScale < PX_MIN_HEIGHTFIELD_Y_SCALE)
00131 return false;
00132 if (!heightField)
00133 return false;
00134
00135 return true;
00136 }
00137
00138 #if !PX_DOXYGEN
00139 }
00140 #endif
00141
00143 #endif