20 struct FCapsuleSpecializeSamplingHelper;
40 , MSegment(
Other.MSegment)
42 SetRadius(
Other.GetRadiusf());
49 SetRadius(
Other.GetRadiusf());
60 SetRadius(
InSteal.GetRadiusf());
71 auto X1 = Origin +
Axis * Radius;
72 auto X2 = Origin +
Axis * (Radius + Height);
144 static bool RaycastFast(
FReal MRadius,
FReal MHeight,
const FVec3&
MVector,
const FVec3& X1,
const FVec3& X2,
const FVec3& StartPoint,
const FVec3& Dir,
const FReal Length,
const FReal Thickness,
FReal& OutTime,
FVec3& OutPosition,
FVec3& OutNormal,
int32& OutFaceIndex)
147 return Raycasts::RayCapsule(StartPoint, Dir,
Length, Thickness, MRadius, MHeight,
MVector, X1, X2, OutTime, OutPosition, OutNormal);
152 return RaycastFast(
GetRadiusf(),
GetHeightf(),
GetAxis(),
GetX1f(),
GetX2f(), StartPoint, Dir,
Length, Thickness, OutTime, OutPosition, OutNormal, OutFaceIndex);
162 return MSegment.Support(Direction,
GetRadiusf() + Thickness, VertexIndex);
168 return MSegment.SupportCore(
FVec3f(Direction), VertexIndex);
174 return MSegment.SupportCore(Direction, VertexIndex);
205 MSegment.Serialize(Ar);
276 return PI2 * Radius * (Height + 2.f * Radius);
304 return FRotation3::FromRotatedVector(
FVec3(0, 0, 1),
Axis);
437 Points[0] =
Capsule.GetOriginf();
438 Points[1] =
Capsule.GetCenterf();
439 Points[2] =
Capsule.GetInsertion();
455 const int32 NumPoints)
481 const FReal HalfHeight = Height / 2;
#define checkSlow(expr)
Definition AssertionMacros.h:332
#define ensure( InExpression)
Definition AssertionMacros.h:464
@ INDEX_NONE
Definition CoreMiscDefines.h:150
#define UE_DEPRECATED(Version, Message)
Definition CoreMiscDefines.h:302
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
constexpr uint32 HashCombine(uint32 A, uint32 C)
Definition TypeHash.h:36
FORCEINLINE VectorRegister4Float MakeVectorRegister(uint32 X, uint32 Y, uint32 Z, uint32 W)
Definition UnrealMathFPU.h:195
FORCEINLINE void VectorStoreFloat3(const VectorRegister4Float &Vec, float *Dst)
Definition UnrealMathFPU.h:594
FORCEINLINE VectorRegister4Float MakeVectorRegisterFloatFromDouble(const VectorRegister4Double &Vec4d)
Definition UnrealMathFPU.h:262
#define UE_PI
Definition UnrealMathUtility.h:129
#define UE_SMALL_NUMBER
Definition UnrealMathUtility.h:130
#define KINDA_SMALL_NUMBER
Definition UnrealMathUtility.h:67
#define UE_KINDA_SMALL_NUMBER
Definition UnrealMathUtility.h:131
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
uint32 Offset
Definition VulkanMemory.cpp:4033
uint32 Size
Definition VulkanMemory.cpp:4034
static constexpr EImplicitObjectType StaticType()
Definition Capsule.h:67
static FReal GetVolume(const FReal Height, const FReal Radius)
Definition Capsule.h:280
FVec3f GetCenterf() const
Definition Capsule.h:258
FORCEINLINE FVec3f SupportCore(const FVec3f &Direction, const FRealSingle InMargin, FRealSingle *OutSupportDelta, int32 &VertexIndex) const
Definition Capsule.h:171
virtual FRealSingle GetRadiusf() const override
Definition Capsule.h:82
FRotation3 GetRotationOfMass() const
Definition Capsule.h:299
int32 GetMostOpposingPlane(const FVec3 &Normal) const
Definition Capsule.h:357
FORCEINLINE FVec3f Supportf(const FVec3f &Direction, const FRealSingle Thickness, int32 &VertexIndex) const
Definition Capsule.h:160
const FVec3 GetX1() const
Definition Capsule.h:264
~FCapsule()
Definition Capsule.h:65
int32 GetPlaneVertex(int32 PlaneIndex, int32 PlaneVertexIndex) const
Definition Capsule.h:369
FCapsule & operator=(FCapsule &&InSteal)
Definition Capsule.h:52
virtual uint32 GetTypeHash() const override
Definition Capsule.h:307
FORCEINLINE VectorRegister4Float SupportCoreSimd(const VectorRegister4Float &Direction, const FReal InMargin) const
Definition Capsule.h:177
TSegment< FReal > GetSegment() const
Definition Capsule.h:270
TArray< FVec3 > ComputeSamplePoints(const int32 NumPoints) const
Definition Capsule.h:562
FORCEINLINE FVec3 Support(const FVec3 &Direction, const FReal Thickness, int32 &VertexIndex) const
Definition Capsule.h:155
virtual const FAABB3 BoundingBox() const override
Definition Capsule.h:126
virtual FReal PhiWithNormal(const FVec3 &x, FVec3 &Normal) const override
Definition Capsule.h:117
TArray< FVec3 > ComputeLocalSamplePoints(const FReal PointsPerUnitArea, const int32 MinPoints=0, const int32 MaxPoints=1000) const
Definition Capsule.h:100
const FVec3f GetOriginf() const
Definition Capsule.h:253
int32 NumPlaneVertices(int32 PlaneIndex) const
Definition Capsule.h:324
const FVec3 GetVertex(int32 VertexIndex) const
Definition Capsule.h:340
static FMatrix33 GetInertiaTensor(const FReal Mass, const FReal Height, const FReal Radius)
Definition Capsule.h:283
FCapsule(const FCapsule &Other)
Definition Capsule.h:38
static FReal GetArea(const FReal Height, const FReal Radius)
Definition Capsule.h:273
FVec3 GetCenter() const
Definition Capsule.h:257
int32 FindVertexPlanes(int32 VertexIndex, int32 *OutVertexPlanes, int32 MaxVertexPlanes) const
Definition Capsule.h:388
virtual FString ToString() const override
Definition Capsule.h:232
FReal GetArea() const
Definition Capsule.h:272
virtual Chaos::FImplicitObjectPtr CopyGeometry() const override
Definition Capsule.h:237
FORCEINLINE FVec3 SupportCoreScaled(const FVec3 &Direction, const FReal InMargin, const FVec3 &Scale, FReal *OutSupportDelta, int32 &VertexIndex) const
Definition Capsule.h:188
FCapsule(FCapsule &&Other)
Definition Capsule.h:45
const FVec3f GetInsertion() const
Definition Capsule.h:255
FReal GetHeight() const
Definition Capsule.h:248
virtual FName GetTypeName() const
Definition ImplicitObject.h:414
FVec3f GetCenterOfMassf() const
Definition Capsule.h:261
FVec3f GetX2f() const
Definition Capsule.h:269
FORCEINLINE void SerializeImp(FArchive &Ar)
Definition Capsule.h:201
virtual FReal GetRadius() const override
Definition Capsule.h:77
FORCEINLINE FVec3 SupportCore(const FVec3 &Direction, const FReal InMargin, FReal *OutSupportDelta, int32 &VertexIndex) const
Definition Capsule.h:165
static FRotation3 GetRotationOfMass(const FVec3 &Axis)
Definition Capsule.h:300
TArray< FVec3 > ComputeLocalSamplePoints(const int32 NumPoints) const
Definition Capsule.h:553
virtual bool Raycast(const FVec3 &StartPoint, const FVec3 &Dir, const FReal Length, const FReal Thickness, FReal &OutTime, FVec3 &OutPosition, FVec3 &OutNormal, int32 &OutFaceIndex) const override
Definition Capsule.h:150
virtual FAABB3 CalculateTransformedBounds(const FRigidTransform3 &Transform) const override
Definition Capsule.h:133
const FVec3f GetAxisf() const
Definition Capsule.h:267
int32 NumPlanes() const
Definition Capsule.h:402
FVec3 GetCenterOfMass() const
Definition Capsule.h:260
int32 GetMostOpposingPlaneScaled(const FVec3 &Normal, const FVec3 &Scale) const
Definition Capsule.h:362
FORCEINLINE FReal GetWindingOrder() const
Definition Capsule.h:332
static FCapsule NewFromOriginAndAxis(const FVec3 &Origin, const FVec3 &Axis, const FReal Height, const FReal Radius)
Definition Capsule.h:69
FMatrix33 GetInertiaTensor(const FReal Mass) const
Definition Capsule.h:282
virtual void Serialize(FChaosArchive &Ar) override
Definition Capsule.h:219
const TPlaneConcrete< FReal, 3 > GetPlane(int32 FaceIndex) const
Definition Capsule.h:375
const FVec3 GetAxis() const
Definition Capsule.h:262
void GetPlaneNX(const int32 FaceIndex, FVec3 &OutN, FVec3 &OutX) const
Definition Capsule.h:380
TArray< FVec3 > ComputeSamplePoints(const FReal PointsPerUnitArea, const int32 MinPoints=0, const int32 MaxPoints=1000) const
Definition Capsule.h:114
FCapsule()
Definition Capsule.h:28
virtual Chaos::FImplicitObjectPtr CopyGeometryWithScale(const FVec3 &Scale) const override
Definition Capsule.h:242
static bool RaycastFast(FReal MRadius, FReal MHeight, const FVec3 &MVector, const FVec3 &X1, const FVec3 &X2, const FVec3 &StartPoint, const FVec3 &Dir, const FReal Length, const FReal Thickness, FReal &OutTime, FVec3 &OutPosition, FVec3 &OutNormal, int32 &OutFaceIndex)
Definition Capsule.h:144
const FVec3f GetX1f() const
Definition Capsule.h:268
const FVec3 GetOrigin() const
Definition Capsule.h:252
FRealSingle GetHeightf() const
Definition Capsule.h:249
FVec3 GetClosestEdgePosition(int32 PlaneIndexHint, const FVec3 &Position) const
Definition Capsule.h:312
FVec3 GetX2() const
Definition Capsule.h:266
FReal GetVolume() const
Definition Capsule.h:279
FCapsule(const FVec3 &x1, const FVec3 &x2, const FReal Radius)
Definition Capsule.h:31
int32 GetVertexPlanes3(int32 VertexIndex, int32 &PlaneIndex0, int32 &PlaneIndex1, int32 &PlaneIndex2) const
Definition Capsule.h:395
Definition ChaosArchive.h:364
Definition ChaosArchive.h:167
Definition ImplicitObject.h:111
bool bHasBoundingBox
Definition ImplicitObject.h:574
CHAOS_API FReal SignedDistance(const FVec3 &x) const
Definition ImplicitObject.cpp:105
FRealSingle Margin
Definition ImplicitObject.h:571
EImplicitObjectType Type
Definition ImplicitObject.h:585
bool bDoCollide
Definition ImplicitObject.h:573
virtual FName GetTypeName() const
Definition ImplicitObject.h:414
CHAOS_API void SerializeImp(FArchive &Ar)
Definition ImplicitObject.cpp:337
void SetMargin(FReal InMargin)
Definition ImplicitObject.h:567
bool bIsConvex
Definition ImplicitObject.h:572
virtual FRealSingle GetMarginf() const
Definition ImplicitObject.h:212
static void SerializeAsAABB(FArchive &Ar, TAABB< T, d > &AABB)
Definition Box.h:467
Definition CorePlane.h:12
Definition CoreSegment.h:10
static FRealSingle DotProduct(const TVector< FRealSingle, 3 > &V1, const TVector< FRealSingle, 3 > &V2)
Definition Vector.h:446
FRealSingle Min() const
Definition Vector.h:523
Definition Archive.h:1208
virtual CORE_API void UsingCustomVersion(const struct FGuid &Guid)
Definition Archive.cpp:590
CORE_API int32 CustomVer(const struct FGuid &Key) const
Definition Archive.cpp:602
UE_REWRITE SizeType Num() const
Definition Array.h:1144
void SetNumUninitialized(SizeType NewNum, EAllowShrinking AllowShrinking=UE::Core::Private::AllowShrinkingByDefault< AllocatorType >())
Definition Array.h:2369
UE_FORCEINLINE_HINT void Reserve(SizeType Number)
Definition Array.h:3016
Definition UniquePtr.h:107
@ Capsule
Definition ImplicitObjectType.h:16
bool RayCapsule(const FVec3 &RayStart, const FVec3 &RayDir, const FReal RayLength, const FReal RayThickness, FReal CapsuleRadius, FReal CapsuleHeight, const FVec3 &CapsuleAxis, const FVec3 &CapsuleX1, const FVec3 &CapsuleX2, FReal &OutTime, FVec3 &OutPosition, FVec3 &OutNormal)
Definition Raycasts.cpp:181
Definition SkeletalMeshComponent.h:307
TSphere< FReal, 3 > FSphere
Definition ImplicitObject.h:36
TVector< FRealSingle, 3 > FVec3f
Definition Core.h:27
TRefCountPtr< FImplicitObject > FImplicitObjectPtr
Definition ImplicitFwd.h:33
uint8 EImplicitObjectType
Definition ImplicitObjectType.h:41
FRealDouble FReal
Definition Real.h:22
PMatrix< FReal, 3, 3 > FMatrix33
Definition Core.h:20
float FRealSingle
Definition Real.h:14
TVector< FReal, 3 > FVec3
Definition Core.h:17
TAABB< FReal, 3 > FAABB3
Definition ImplicitObject.h:34
uint32 GetTypeHash(const TBox< T > &Box)
Definition Box.h:1008
static FORCEINLINE void ComputeSamplePoints(TArray< FVec3 > &Points, const FCapsule &Capsule, const int32 NumPoints)
Definition Capsule.h:424
static FORCEINLINE void ComputeGoldenSpiralPoints(TArray< FVec3 > &Points, const FVec3 &Origin, const FVec3 &Axis, const FReal Height, const FReal Radius, const int32 NumPoints)
Definition Capsule.h:449
static FORCEINLINE void ComputeGoldenSpiralPoints(TArray< FVec3 > &Points, const FCapsule &Capsule, const int32 NumPoints)
Definition Capsule.h:446
static FORCEINLINE void ComputeGoldenSpiralPointsUnoriented(TArray< FVec3 > &Points, const FReal Radius, const FReal Height, const int32 NumPoints, const bool IncludeEndCaps=true, int32 SpiralSeed=0)
Definition Cylinder.h:368
CORE_API static const FGuid GUID
Definition ExternalPhysicsCustomObjectVersion.h:144
@ CapsulesNoUnionOrAABBs
Definition ExternalPhysicsCustomObjectVersion.h:103
static constexpr UE_FORCEINLINE_HINT T Clamp(const T X, const T MinValue, const T MaxValue)
Definition UnrealMathUtility.h:592
static CORE_API UE::Math::TVector< T > ClosestPointOnLine(const UE::Math::TVector< T > &LineStart, const UE::Math::TVector< T > &LineEnd, const UE::Math::TVector< T > &Point)
Definition NumericLimits.h:41
Definition UnrealMathFPU.h:20