9#ifdef JPH_DEBUG_RENDERER
62 void DetermineMinAndMaxSample(
float &outMinValue,
float &outMaxValue,
float &outQuantizationScale) const;
67 uint32 CalculateBitsPerSampleForError(
float inMaxError) const;
76 float mMinHeightValue = FLT_MAX;
79 float mMaxHeightValue = -FLT_MAX;
103 float mActiveEdgeCosThresholdAngle = 0.996195f;
127 virtual AABox GetLocalBounds()
const override;
145 virtual Vec3 GetSurfaceNormal(
const SubShapeID &inSubShapeID,
Vec3Arg inLocalSurfacePosition)
const override;
148 virtual void GetSupportingFace(
const SubShapeID &inSubShapeID,
Vec3Arg inDirection,
Vec3Arg inScale,
Mat44Arg inCenterOfMassTransform, SupportingFace &outVertices)
const override;
153#ifdef JPH_DEBUG_RENDERER
166 virtual void CollideSoftBodyVertices(
Mat44Arg inCenterOfMassTransform,
Vec3Arg inScale,
SoftBodyVertex *ioVertices,
uint inNumVertices,
float inDeltaTime,
Vec3Arg inDisplacementDueToGravity,
int inCollidingShapeIndex)
const override;
169 virtual void GetTrianglesStart(GetTrianglesContext &ioContext,
const AABox &inBox,
Vec3Arg inPositionCOM,
QuatArg inRotation,
Vec3Arg inScale)
const override;
172 virtual int GetTrianglesNext(GetTrianglesContext &ioContext,
int inMaxTrianglesRequested,
Float3 *outTriangleVertices,
const PhysicsMaterial **outMaterials =
nullptr)
const override;
179 bool IsNoCollision(
uint inX,
uint inY)
const;
183 bool ProjectOntoSurface(
Vec3Arg inLocalPosition,
Vec3 &outSurfacePosition,
SubShapeID &outSubShapeID)
const;
197 void GetHeights(
uint inX,
uint inY,
uint inSizeX,
uint inSizeY,
float *outHeights, intptr_t inHeightsStride)
const;
209 void SetHeights(
uint inX,
uint inY,
uint inSizeX,
uint inSizeY,
const float *inHeights, intptr_t inHeightsStride,
TempAllocator &inAllocator,
float inActiveEdgeCosThresholdAngle = 0.996195f);
221 void GetMaterials(
uint inX,
uint inY,
uint inSizeX,
uint inSizeY,
uint8 *outMaterials, intptr_t inMaterialsStride)
const;
236 virtual void SaveBinaryState(
StreamOut &inStream)
const override;
241 virtual Stats GetStats()
const override;
246#ifdef JPH_DEBUG_RENDERER
252 static void sRegister();
256 virtual void RestoreBinaryState(
StreamIn &inStream)
override;
266 void AllocateBuffers();
269 void CalculateActiveEdges(
uint inX,
uint inY,
uint inSizeX,
uint inSizeY,
const float *inHeights,
uint inHeightsStartX,
uint inHeightsStartY, intptr_t inHeightsStride,
float inHeightsScale,
float inActiveEdgeCosThresholdAngle,
TempAllocator &inAllocator);
278 inline uint GetNumBlocks()
const {
return mSampleCount / mBlockSize; }
284 static inline void sGetRangeBlockOffsetAndStride(
uint inNumBlocks,
uint inMaxLevel,
uint &outRangeBlockOffset,
uint &outRangeBlockStride);
287 inline void GetBlockOffsetAndScale(
uint inBlockX,
uint inBlockY,
uint inRangeBlockOffset,
uint inRangeBlockStride,
float &outBlockOffset,
float &outBlockScale)
const;
293 inline Vec3 GetPosition(
uint inX,
uint inY,
float inBlockOffset,
float inBlockScale,
bool &outNoCollision)
const;
296 uint GetSubShapeIDBits()
const;
300 inline void DecodeSubShapeID(
const SubShapeID &inSubShapeID,
uint &outX,
uint &outY,
uint &outTriangle)
const;
306 static void sCollideConvexVsHeightField(
const Shape *inShape1,
const Shape *inShape2,
Vec3Arg inScale1,
Vec3Arg inScale2,
Mat44Arg inCenterOfMassTransform1,
Mat44Arg inCenterOfMassTransform2,
const SubShapeIDCreator &inSubShapeIDCreator1,
const SubShapeIDCreator &inSubShapeIDCreator2,
const CollideShapeSettings &inCollideShapeSettings,
CollideShapeCollector &ioCollector,
const ShapeFilter &inShapeFilter);
307 static void sCollideSphereVsHeightField(
const Shape *inShape1,
const Shape *inShape2,
Vec3Arg inScale1,
Vec3Arg inScale2,
Mat44Arg inCenterOfMassTransform1,
Mat44Arg inCenterOfMassTransform2,
const SubShapeIDCreator &inSubShapeIDCreator1,
const SubShapeIDCreator &inSubShapeIDCreator2,
const CollideShapeSettings &inCollideShapeSettings,
CollideShapeCollector &ioCollector,
const ShapeFilter &inShapeFilter);
313 template <
class Visitor>
314 void WalkHeightField(Visitor &ioVisitor)
const;
317 struct alignas(16) RangeBlock
324 inline void GetRangeBlock(
uint inBlockX,
uint inBlockY,
uint inRangeBlockOffset,
uint inRangeBlockStride, RangeBlock *&outBlock,
uint &outIndexInBlock);
327 static const uint sGridOffsets[];
337 uint32 mHeightSamplesSize = 0;
338 uint32 mRangeBlocksSize = 0;
339 uint32 mActiveEdgesSize = 0;
340 uint8 mBitsPerSample = 8;
341 uint8 mSampleMask = 0xff;
344 RangeBlock * mRangeBlocks =
nullptr;
345 uint8 * mHeightSamples =
nullptr;
346 uint8 * mActiveEdges =
nullptr;
351 uint32 mNumBitsPerMaterialIndex = 0;
353#ifdef JPH_DEBUG_RENDERER
356 mutable bool mCachedUseMaterialColors =
false;
std::uint8_t uint8
Definition Core.h:449
#define JPH_EXPORT
Definition Core.h:236
unsigned int uint
Definition Core.h:448
#define JPH_NAMESPACE_END
Definition Core.h:377
std::uint32_t uint32
Definition Core.h:451
#define JPH_IF_DEBUG_RENDERER(...)
Definition Core.h:532
#define JPH_NAMESPACE_BEGIN
Definition Core.h:371
std::uint16_t uint16
Definition Core.h:450
#define JPH_ASSERT(...)
Definition IssueReporting.h:33
uint CountLeadingZeros(uint32 inValue)
Compute the number of leading zero bits (how many high bits are zero)
Definition Math.h:129
#define JPH_OVERRIDE_NEW_DELETE
Macro to override the new and delete functions.
Definition Memory.h:31
#define JPH_DECLARE_SERIALIZABLE_VIRTUAL(linkage, class_name)
Definition SerializableObject.h:109
EShapeSubType
This enumerates all shape types, each shape can return its type through Shape::GetSubType.
Definition Shape.h:74
EShapeType
Shapes are categorized in groups, each shape can return which group it belongs to through its Shape::...
Definition Shape.h:57
@ HeightField
Used by HeightFieldShape.
Axis aligned box.
Definition AABox.h:16
Settings to be passed with a collision query.
Definition CollideShape.h:94
Virtual interface that allows collecting multiple collision results.
Definition CollisionCollector.h:45
Class that holds an RGBA color with 8-bits per component.
Definition Color.h:16
Base class for all convex shapes. Defines a virtual interface.
Definition ConvexShape.h:36
Definition DebugRenderer.h:47
Class that holds 3 floats. Used as a storage class. Convert to Vec3 for calculations.
Definition Float3.h:13
Definition HeightFieldShape.cpp:1668
A height field shape. Cannot be used as a dynamic object.
Definition HeightFieldShape.h:108
const PhysicsMaterialList & GetMaterialList() const
Get the current list of materials, the indices returned by GetMaterials() will index into this list.
Definition HeightFieldShape.h:212
uint GetSampleCount() const
Get the size of the height field. Note that this will always be rounded up to the nearest multiple of...
Definition HeightFieldShape.h:121
virtual float GetInnerRadius() const override
Definition HeightFieldShape.h:133
float GetMaxHeightValue() const
Definition HeightFieldShape.h:187
float GetMinHeightValue() const
Get the range of height values that this height field can encode. Can be used to determine the allowe...
Definition HeightFieldShape.h:186
JPH_OVERRIDE_NEW_DELETE HeightFieldShape()
Constructor.
Definition HeightFieldShape.h:113
static bool sDrawTriangleOutlines
Definition HeightFieldShape.h:248
virtual uint GetSubShapeIDBitsRecursive() const override
Get the max number of sub shape ID bits that are needed to be able to address any leaf shape in this ...
Definition HeightFieldShape.h:130
virtual void GetSubmergedVolume(Mat44Arg inCenterOfMassTransform, Vec3Arg inScale, const Plane &inSurface, float &outTotalVolume, float &outSubmergedVolume, Vec3 &outCenterOfBuoyancy JPH_IF_DEBUG_RENDERER(, RVec3Arg inBaseOffset)) const override
Definition HeightFieldShape.h:151
virtual bool MustBeStatic() const override
Check if this shape can only be used to create a static body or if it can also be dynamic/kinematic.
Definition HeightFieldShape.h:118
uint GetBlockSize() const
Get the size of a block.
Definition HeightFieldShape.h:124
virtual float GetVolume() const override
Definition HeightFieldShape.h:244
Class that constructs a HeightFieldShape.
Definition HeightFieldShape.h:40
Describes the mass and inertia properties of a body. Used during body construction only.
Definition MassProperties.h:16
Holds a 4x4 matrix of floats, but supports also operations on the 3x3 upper left part of the matrix.
Definition Mat44.h:13
Definition PhysicsMaterial.h:23
An infinite plane described by the formula X . Normal + Constant = 0.
Definition Plane.h:11
Specialization of cast result against a shape.
Definition CastResult.h:30
Settings to be passed with a ray cast.
Definition RayCast.h:70
Settings to be passed with a shape cast.
Definition ShapeCast.h:92
Filter class.
Definition ShapeFilter.h:17
Base class for all shapes (collision volume of a body). Defines a virtual interface for collision det...
Definition Shape.h:178
Definition SoftBodyVertex.h:16
Simple binary input stream.
Definition StreamIn.h:13
Simple binary output stream.
Definition StreamOut.h:13
Definition SubShapeID.h:108
A sub shape id contains a path to an element (usually a triangle or other primitive type) of a compou...
Definition SubShapeID.h:23
Definition TempAllocator.h:16
static JPH_INLINE Vec3 sZero()
Vector with all zeros.
Definition Vec3.inl:107
static JPH_INLINE Vec3 sReplicate(float inV)
Replicate inV across all components.
Definition Vec3.inl:118
Constants for HeightFieldShape, this was moved out of the HeightFieldShape because of a linker bug.
Definition HeightFieldShape.h:21
constexpr uint cNumBitsXY
A position in the hierarchical grid is defined by a level (which grid), x and y position....
Definition HeightFieldShape.h:29
constexpr uint cMaskBitsXY
Definition HeightFieldShape.h:30
constexpr int cStackSize
Stack size to use during WalkHeightField.
Definition HeightFieldShape.h:26
constexpr uint16 cMaxHeightValue16
This is the maximum allowed height value.
Definition HeightFieldShape.h:35
constexpr float cNoCollisionValue
Value used to create gaps in the height field.
Definition HeightFieldShape.h:23
constexpr uint16 cNoCollisionValue16
When height samples are converted to 16 bit:
Definition HeightFieldShape.h:34
constexpr uint cLevelShift
Definition HeightFieldShape.h:31
Definition HeightFieldShape.cpp:2339
Definition ShapeCast.h:69