24 template <
typename RealType>
33 const RealType R0 =
V02.Dot(
PV2);
34 const RealType R1 =
V12.Dot(
PV2);
40 const RealType
InvDet = RealType(1) /
Det;
82 template <
typename RealType>
85 return Barycentric.
X * V0 + Barycentric.
Y * V1 + Barycentric.
Z * V2;
198 Swap(ABC[1], ABC[2]);
263 return ABC[0] + Direction.GetUnsafeNormal() * Thickness;
272 return ABC[1] + Direction.GetUnsafeNormal() * Thickness;
279 return ABC[2] + Direction.GetUnsafeNormal() * Thickness;
341 return FString::Printf(
TEXT(
"Triangle: A: [%f, %f, %f], B: [%f, %f, %f], C: [%f, %f, %f]"),
GetVertex(0).
X,
GetVertex(0).
Y,
GetVertex(0).
Z,
GetVertex(1).
X,
GetVertex(1).
Y,
GetVertex(1).
Z,
GetVertex(2).
X,
GetVertex(2).
Y,
GetVertex(2).
Z);
374 template<
typename T,
typename ToleranceProv
ider = TRayTriangleIntersectionDefaultToleranceProv
ider<T> >
384 if (FMath::Abs(
Den) < ToleranceProvider::ParallelTolerance)
408 if (
VV < -ToleranceProvider::BaryTolerance || (
VV +
UU) >(1 + ToleranceProvider::BaryTolerance))
473 : FImplicitObject(EImplicitObject::IsConvex | EImplicitObject::HasBoundingBox, ImplicitObjectType::
Triangle)
494 return Tri.GetNormal();
499 return Tri.GetPlane();
504 return ImplicitObjectType::Triangle;
514 TAABB<T, 3> Bounds(Tri[0], Tri[0]);
515 Bounds.GrowToInclude(Tri[1]);
516 Bounds.GrowToInclude(Tri[2]);
521 virtual TVec3<T> Support(
const TVec3<T>& Direction,
const T Thickness,
int32& VertexIndex)
const override
523 return Tri.Support(Direction, Thickness, VertexIndex);
528 return Tri.Raycast(StartPoint, Dir,
Length, Thickness, OutTime, OutPosition, OutNormal, OutFaceIndex);
533 return Tri.GetNormal();
538 return Tri.Overlap(
Point, Thickness);
541 virtual FString
ToString()
const override
543 return FString::Printf(
TEXT(
"Triangle: A: [%f, %f, %f], B: [%f, %f, %f], C: [%f, %f, %f]"), Tri[0].
X, Tri[0].
Y, Tri[0].
Z, Tri[1].
X, Tri[1].
Y, Tri[1].
Z, Tri[2].
X, Tri[2].
Y, Tri[2].
Z);
546 virtual void Serialize(FChaosArchive& Ar)
override
558 return FName(
"Triangle");
#define checkSlow(expr)
Definition AssertionMacros.h:332
FString GetTypeName()
Definition Casts.h:66
@ INDEX_NONE
Definition CoreMiscDefines.h:150
#define FORCEINLINE_DEBUGGABLE
Definition CoreMiscDefines.h:74
#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
#define UE_SMALL_NUMBER
Definition UnrealMathUtility.h:130
#define UE_KINDA_SMALL_NUMBER
Definition UnrealMathUtility.h:131
Definition ChaosArchive.h:167
Definition ImplicitObject.h:111
Definition CorePlane.h:12
FORCEINLINE int32 FindVertexPlanes(int32 VertexIndex, int32 *OutVertexPlanes, int32 MaxVertexPlanes) const
Definition Triangle.h:211
FORCEINLINE FRealSingle GetMarginf() const
Definition Triangle.h:313
TVec3< T > GetClosestEdgePosition(int32 PlaneIndexHint, const TVec3< T > &Position) const
Definition Triangle.h:181
FORCEINLINE TPlaneConcrete< T, 3 > GetPlane(int32 FaceIndex) const
Definition Triangle.h:132
FORCEINLINE T GetRadius() const
Definition Triangle.h:312
FORCEINLINE T GetMargin() const
Definition Triangle.h:311
FORCEINLINE_DEBUGGABLE TVec3< T > SupportCore(const TVec3< T > &Direction, const T InMargin, T *OutSupportDelta, int32 &VertexIndex) const
Definition Triangle.h:284
FORCEINLINE const TVec3< T > & GetVertex(const int32 InIndex) const
Definition Triangle.h:114
TVec3< T > GetClosestEdge(int32 PlaneIndexHint, const TVec3< T > &Position, TVec3< T > &OutEdgePos0, TVec3< T > &OutEdgePos1) const
Definition Triangle.h:150
FORCEINLINE bool LineIntersection(const TVec3< T > &StartPoint, const TVec3< T > &EndPoint, TVector< T, 2 > &OutBary, T &OutTime) const
Definition Triangle.h:438
FORCEINLINE TVec3< T > GetCentroid() const
Definition Triangle.h:143
FORCEINLINE TVec3< T > GetNormal() const
Definition Triangle.h:120
FORCEINLINE T GetWindingOrder() const
Definition Triangle.h:204
int32 NumPlanes() const
Definition Triangle.h:243
int32 GetMostOpposingPlane(const TVec3< T > &Normal) const
Definition Triangle.h:229
int32 GetPlaneVertex(int32 PlaneIndex, int32 PlaneVertexIndex) const
Definition Triangle.h:236
int32 NumPlaneVertices(int32 PlaneIndex) const
Definition Triangle.h:190
int32 GetVertexPlanes3(int32 VertexIndex, int32 &PlaneIndex0, int32 &PlaneIndex1, int32 &PlaneIndex2) const
Definition Triangle.h:222
TTriangle()
Definition Triangle.h:93
friend FChaosArchive & operator<<(FChaosArchive &Ar, TTriangle &Value)
Definition Triangle.h:361
FORCEINLINE TPlane< T, 3 > GetPlane() const
Definition Triangle.h:125
FORCEINLINE bool Overlap(const TVec3< T > &Point, const T Thickness) const
Definition Triangle.h:327
FORCEINLINE void GetPlaneNX(const int32 FaceIndex, TVec3< T > &OutN, TVec3< T > &OutX) const
Definition Triangle.h:137
FORCEINLINE TVec3< T > SupportCoreScaled(const TVec3< T > &Direction, T InMargin, const TVec3< T > &Scale, T *OutSupportDelta, int32 &VertexIndex) const
Definition Triangle.h:305
FORCEINLINE FRealSingle GetRadiusf() const
Definition Triangle.h:314
FORCEINLINE TVec3< T > & operator[](uint32 InIndex)
Definition Triangle.h:102
FORCEINLINE T PhiWithNormal(const TVec3< T > &InSamplePoint, TVec3< T > &OutNormal) const
Definition Triangle.h:245
FTriangle & ReverseWinding()
Definition Triangle.h:196
TTriangle(const TVec3< T > &InA, const TVec3< T > &InB, const TVec3< T > &InC)
Definition Triangle.h:97
FString ToString() const
Definition Triangle.h:339
FORCEINLINE const TVec3< T > & operator[](uint32 InIndex) const
Definition Triangle.h:108
FORCEINLINE bool IsConvex() const
Definition Triangle.h:334
FORCEINLINE bool Raycast(const TVec3< T > &StartPoint, const TVec3< T > &Dir, const T Length, const T Thickness, T &OutTime, TVec3< T > &OutPosition, TVec3< T > &OutNormal, int32 &OutFaceIndex) const
Definition Triangle.h:316
FORCEINLINE TVec3< T > Support(const TVec3< T > &Direction, const T Thickness, int32 &VertexIndex) const
Definition Triangle.h:252
T X
Definition Vector.h:1168
T Z
Definition Vector.h:1170
TVector< T, 3 > GetSafeNormal() const
Definition Vector.h:1079
T Y
Definition Vector.h:1169
FORCEINLINE T SizeSquared() const
Definition Vector.h:1067
Definition NameTypes.h:617
FVector GetNormal(const FLocationHit &Hit)
Definition ChaosInterfaceWrapperCore.h:165
@ IsConvex
Definition ImplicitObjectType.h:67
@ HasBoundingBox
Definition ImplicitObjectType.h:68
Definition SkeletalMeshComponent.h:307
bool GJKRaycast(const TGeometryA &A, const TGeometryB &B, const TRigidTransform< T, 3 > &StartTM, const TVector< T, 3 > &RayDir, const T RayLength, T &OutTime, TVector< T, 3 > &OutPosition, TVector< T, 3 > &OutNormal, const T ThicknessA=0, const TVector< T, 3 > &InitialDir=TVector< T, 3 >(1, 0, 0), const T ThicknessB=0)
Definition GJK.h:1449
uint8 EImplicitObjectType
Definition ImplicitObjectType.h:41
@ Y
Definition SimulationModuleBase.h:153
@ X
Definition SimulationModuleBase.h:152
FChaosArchive & operator<<(FChaosArchive &Ar, FRigidParticleControlFlags &Flags)
Definition RigidParticleControlFlags.cpp:15
TVector< T, d > FindClosestPointOnTriangle(const TVector< T, d > &ClosestPointOnPlane, const TVector< T, d > &P0, const TVector< T, d > &P1, const TVector< T, d > &P2, const TVector< T, d > &P)
Definition Plane.h:168
TVec3< RealType > ToBarycentric(const TVec3< RealType > &Point, const TVec3< RealType > &V0, const TVec3< RealType > &V1, const TVec3< RealType > &V2)
Convert the cartesian coordinate into a barycentric corrdinate. Compute barycentric coordinates/weigh...
Definition Triangle.h:25
float FRealSingle
Definition Real.h:14
TVec3< RealType > FromBarycentric(const TVec3< RealType > &Barycentric, const TVec3< RealType > &V0, const TVec3< RealType > &V1, const TVec3< RealType > &V2)
Convert the barycentric coordinate into a cartesian corrdinate.
Definition Triangle.h:83
FORCEINLINE bool RayTriangleIntersection(const TVec3< T > &RayStart, const TVec3< T > &RayDir, T RayLength, const TVec3< T > &A, const TVec3< T > &B, const TVec3< T > &C, T &OutT, TVec3< T > &OutN)
Definition Triangle.h:427
FORCEINLINE_DEBUGGABLE bool RayTriangleIntersectionAndBary(const TVec3< T > &RayStart, const TVec3< T > &RayDir, T RayLength, const TVec3< T > &A, const TVec3< T > &B, const TVec3< T > &C, T &OutT, TVec2< T > &OutBary, TVec3< T > &OutN)
Definition Triangle.h:375
uint32 GetTypeHash(const FKey &Key)
Definition BlackboardKey.h:35
FString ToString(uint16 Value)
Definition PathFollowingComponent.cpp:82
uint32 GetTypeHash(const TBox< T > &Box)
Definition Box.h:1008
Definition Triangle.h:369
static constexpr T BaryTolerance
Definition Triangle.h:371
static constexpr T ParallelTolerance
Definition Triangle.h:370
Definition Triangle.h:345
static constexpr T BaryTolerance
Definition Triangle.h:347
static constexpr T ParallelTolerance
Definition Triangle.h:346
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