CastConvexVsTriangles.h 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. // Jolt Physics Library (https://github.com/jrouwe/JoltPhysics)
  2. // SPDX-FileCopyrightText: 2021 Jorrit Rouwe
  3. // SPDX-License-Identifier: MIT
  4. #pragma once
  5. #include <Jolt/Physics/Collision/Shape/ConvexShape.h>
  6. #include <Jolt/Physics/Collision/ShapeCast.h>
  7. JPH_NAMESPACE_BEGIN
  8. /// Collision detection helper that casts a convex object vs one or more triangles
  9. class JPH_EXPORT CastConvexVsTriangles
  10. {
  11. public:
  12. /// Constructor
  13. /// @param inShapeCast The shape to cast against the triangles and its start and direction
  14. /// @param inShapeCastSettings Settings for performing the cast
  15. /// @param inScale Local space scale for the shape to cast against.
  16. /// @param inCenterOfMassTransform2 Is the center of mass transform of shape 2 (excluding scale), this is used to provide a transform to the shape cast result so that local quantities can be transformed into world space.
  17. /// @param inSubShapeIDCreator1 Class that tracks the current sub shape ID for the casting shape
  18. /// @param ioCollector The collector that receives the results.
  19. CastConvexVsTriangles(const ShapeCast &inShapeCast, const ShapeCastSettings &inShapeCastSettings, Vec3Arg inScale, Mat44Arg inCenterOfMassTransform2, const SubShapeIDCreator &inSubShapeIDCreator1, CastShapeCollector &ioCollector);
  20. /// Cast convex object with a single triangle
  21. /// @param inV0 , inV1 , inV2: CCW triangle vertices
  22. /// @param inActiveEdges bit 0 = edge v0..v1 is active, bit 1 = edge v1..v2 is active, bit 2 = edge v2..v0 is active
  23. /// An active edge is an edge that is not connected to another triangle in such a way that it is impossible to collide with the edge
  24. /// @param inSubShapeID2 The sub shape ID for the triangle
  25. void Cast(Vec3Arg inV0, Vec3Arg inV1, Vec3Arg inV2, uint8 inActiveEdges, const SubShapeID &inSubShapeID2);
  26. protected:
  27. const ShapeCast & mShapeCast;
  28. const ShapeCastSettings & mShapeCastSettings;
  29. const Mat44 & mCenterOfMassTransform2;
  30. Vec3 mScale;
  31. SubShapeIDCreator mSubShapeIDCreator1;
  32. CastShapeCollector & mCollector;
  33. private:
  34. ConvexShape::SupportBuffer mSupportBuffer; ///< Buffer that holds the support function of the cast shape
  35. const ConvexShape::Support * mSupport = nullptr; ///< Support function of the cast shape
  36. float mScaleSign; ///< Sign of the scale, -1 if object is inside out, 1 if not
  37. };
  38. JPH_NAMESPACE_END