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;
107 float mActiveEdgeCosThresholdAngle = 0.996195f;
138 virtual AABox GetLocalBounds()
const override;
156 virtual Vec3 GetSurfaceNormal(
const SubShapeID &inSubShapeID,
Vec3Arg inLocalSurfacePosition)
const override;
159 virtual void GetSupportingFace(
const SubShapeID &inSubShapeID,
Vec3Arg inDirection,
Vec3Arg inScale,
Mat44Arg inCenterOfMassTransform, SupportingFace &outVertices)
const override;
164#ifdef JPH_DEBUG_RENDERER
180 virtual void GetTrianglesStart(GetTrianglesContext &ioContext,
const AABox &inBox,
Vec3Arg inPositionCOM,
QuatArg inRotation,
Vec3Arg inScale)
const override;
183 virtual int GetTrianglesNext(GetTrianglesContext &ioContext,
int inMaxTrianglesRequested,
Float3 *outTriangleVertices,
const PhysicsMaterial **outMaterials =
nullptr)
const override;
190 bool IsNoCollision(
uint inX,
uint inY)
const;
194 bool ProjectOntoSurface(
Vec3Arg inLocalPosition,
Vec3 &outSurfacePosition,
SubShapeID &outSubShapeID)
const;
201 void GetSubShapeCoordinates(
const SubShapeID &inSubShapeID,
uint &outX,
uint &outY,
uint &outTriangleIndex)
const;
215 void GetHeights(
uint inX,
uint inY,
uint inSizeX,
uint inSizeY,
float *outHeights, intptr_t inHeightsStride)
const;
228 void SetHeights(
uint inX,
uint inY,
uint inSizeX,
uint inSizeY,
const float *inHeights, intptr_t inHeightsStride,
TempAllocator &inAllocator,
float inActiveEdgeCosThresholdAngle = 0.996195f);
240 void GetMaterials(
uint inX,
uint inY,
uint inSizeX,
uint inSizeY,
uint8 *outMaterials, intptr_t inMaterialsStride)
const;
256 virtual void SaveBinaryState(
StreamOut &inStream)
const override;
261 virtual Stats GetStats()
const override;
266#ifdef JPH_DEBUG_RENDERER
272 static void sRegister();
276 virtual void RestoreBinaryState(
StreamIn &inStream)
override;
286 void AllocateBuffers();
289 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);
298 inline uint GetNumBlocks()
const {
return mSampleCount / mBlockSize; }
304 static inline void sGetRangeBlockOffsetAndStride(
uint inNumBlocks,
uint inMaxLevel,
uint &outRangeBlockOffset,
uint &outRangeBlockStride);
307 inline void GetBlockOffsetAndScale(
uint inBlockX,
uint inBlockY,
uint inRangeBlockOffset,
uint inRangeBlockStride,
float &outBlockOffset,
float &outBlockScale)
const;
313 inline Vec3 GetPosition(
uint inX,
uint inY,
float inBlockOffset,
float inBlockScale,
bool &outNoCollision)
const;
316 uint GetSubShapeIDBits()
const;
320 inline void DecodeSubShapeID(
const SubShapeID &inSubShapeID,
uint &outX,
uint &outY,
uint &outTriangle)
const;
326 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);
327 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);
333 template <
class Visitor>
334 void WalkHeightField(Visitor &ioVisitor)
const;
337 struct alignas(16) RangeBlock
344 inline void GetRangeBlock(
uint inBlockX,
uint inBlockY,
uint inRangeBlockOffset,
uint inRangeBlockStride, RangeBlock *&outBlock,
uint &outIndexInBlock);
347 static const uint sGridOffsets[];
357 uint32 mHeightSamplesSize = 0;
358 uint32 mRangeBlocksSize = 0;
359 uint32 mActiveEdgesSize = 0;
360 uint8 mBitsPerSample = 8;
361 uint8 mSampleMask = 0xff;
364 RangeBlock * mRangeBlocks =
nullptr;
365 uint8 * mHeightSamples =
nullptr;
366 uint8 * mActiveEdges =
nullptr;
371 uint32 mNumBitsPerMaterialIndex = 0;
373#ifdef JPH_DEBUG_RENDERER
376 mutable bool mCachedUseMaterialColors =
false;
std::uint8_t uint8
Definition: Core.h:453
#define JPH_EXPORT
Definition: Core.h:236
unsigned int uint
Definition: Core.h:452
#define JPH_NAMESPACE_END
Definition: Core.h:378
std::uint32_t uint32
Definition: Core.h:455
#define JPH_IF_DEBUG_RENDERER(...)
Definition: Core.h:536
#define JPH_NAMESPACE_BEGIN
Definition: Core.h:372
std::uint16_t uint16
Definition: Core.h:454
#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:131
#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:77
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.
Array< PhysicsMaterialRefC > PhysicsMaterialList
Definition: Shape.h:53
Axis aligned box.
Definition: AABox.h:16
Settings to be passed with a collision query.
Definition: CollideShape.h:94
Definition: CollideSoftBodyVertexIterator.h:15
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:1708
Definition: HeightFieldShape.h:116
const PhysicsMaterialList & GetMaterialList() const
Get the current list of materials, the indices returned by GetMaterials() will index into this list.
Definition: HeightFieldShape.h:231
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:132
virtual float GetInnerRadius() const override
Definition: HeightFieldShape.h:144
float GetMaxHeightValue() const
Definition: HeightFieldShape.h:205
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:204
JPH_OVERRIDE_NEW_DELETE HeightFieldShape()
Constructor.
Definition: HeightFieldShape.h:121
static bool sDrawTriangleOutlines
Definition: HeightFieldShape.h:268
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:141
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:162
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:129
uint GetBlockSize() const
Get the size of a block.
Definition: HeightFieldShape.h:135
virtual float GetVolume() const override
Definition: HeightFieldShape.h:264
Class that constructs a HeightFieldShape.
Definition: HeightFieldShape.h:40
HeightFieldShapeSettings()=default
Default constructor for deserialization.
Array< float > mHeightSamples
An array of mSampleCount^2 height samples. Samples are stored in row major order, so the sample at (x...
Definition: HeightFieldShape.h:96
Array< uint8 > mMaterialIndices
An array of (mSampleCount - 1)^2 material indices.
Definition: HeightFieldShape.h:99
PhysicsMaterialList mMaterials
The materials of square at (x, y) is: mMaterials[mMaterialIndices[x + y * (mSampleCount - 1)]].
Definition: HeightFieldShape.h:102
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
Definition: Reference.h:107
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:186
virtual ShapeResult Create() const =0
Create a shape according to the settings specified by this object.
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:2386
Definition: ShapeCast.h:69