Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
godotengine
GitHub Repository: godotengine/godot
Path: blob/master/thirdparty/jolt_physics/Jolt/Physics/Collision/CastSphereVsTriangles.h
9912 views
1
// Jolt Physics Library (https://github.com/jrouwe/JoltPhysics)
2
// SPDX-FileCopyrightText: 2021 Jorrit Rouwe
3
// SPDX-License-Identifier: MIT
4
5
#pragma once
6
7
#include <Jolt/Physics/Collision/ShapeCast.h>
8
9
JPH_NAMESPACE_BEGIN
10
11
/// Collision detection helper that casts a sphere vs one or more triangles
12
class JPH_EXPORT CastSphereVsTriangles
13
{
14
public:
15
/// Constructor
16
/// @param inShapeCast The sphere to cast against the triangles and its start and direction
17
/// @param inShapeCastSettings Settings for performing the cast
18
/// @param inScale Local space scale for the shape to cast against (scales relative to its center of mass).
19
/// @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.
20
/// @param inSubShapeIDCreator1 Class that tracks the current sub shape ID for the casting shape
21
/// @param ioCollector The collector that receives the results.
22
CastSphereVsTriangles(const ShapeCast &inShapeCast, const ShapeCastSettings &inShapeCastSettings, Vec3Arg inScale, Mat44Arg inCenterOfMassTransform2, const SubShapeIDCreator &inSubShapeIDCreator1, CastShapeCollector &ioCollector);
23
24
/// Cast sphere with a single triangle
25
/// @param inV0 , inV1 , inV2: CCW triangle vertices
26
/// @param inActiveEdges bit 0 = edge v0..v1 is active, bit 1 = edge v1..v2 is active, bit 2 = edge v2..v0 is active
27
/// 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
28
/// @param inSubShapeID2 The sub shape ID for the triangle
29
void Cast(Vec3Arg inV0, Vec3Arg inV1, Vec3Arg inV2, uint8 inActiveEdges, const SubShapeID &inSubShapeID2);
30
31
protected:
32
Vec3 mStart; ///< Starting location of the sphere
33
Vec3 mDirection; ///< Direction and length of movement of sphere
34
float mRadius; ///< Scaled radius of sphere
35
const ShapeCastSettings & mShapeCastSettings;
36
const Mat44 & mCenterOfMassTransform2;
37
Vec3 mScale;
38
SubShapeIDCreator mSubShapeIDCreator1;
39
CastShapeCollector & mCollector;
40
41
private:
42
void AddHit(bool inBackFacing, const SubShapeID &inSubShapeID2, float inFraction, Vec3Arg inContactPointA, Vec3Arg inContactPointB, Vec3Arg inContactNormal);
43
void AddHitWithActiveEdgeDetection(Vec3Arg inV0, Vec3Arg inV1, Vec3Arg inV2, bool inBackFacing, Vec3Arg inTriangleNormal, uint8 inActiveEdges, const SubShapeID &inSubShapeID2, float inFraction, Vec3Arg inContactPointA, Vec3Arg inContactPointB, Vec3Arg inContactNormal);
44
float RayCylinder(Vec3Arg inRayDirection, Vec3Arg inCylinderA, Vec3Arg inCylinderB, float inRadius) const;
45
46
float mScaleSign; ///< Sign of the scale, -1 if object is inside out, 1 if not
47
};
48
49
JPH_NAMESPACE_END
50
51