Jolt Physics
A multi core friendly Game Physics Engine
Loading...
Searching...
No Matches
TriangleSplitter.h
Go to the documentation of this file.
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
8
10
13{
14public:
16 TriangleSplitter(const VertexList &inVertices, const IndexedTriangleList &inTriangles);
17
19 virtual ~TriangleSplitter() = default;
20
21 struct Stats
22 {
23 const char * mSplitterName = nullptr;
24 int mLeafSize = 0;
25 };
26
28 virtual void GetStats(Stats &outStats) const = 0;
29
31 struct Range
32 {
34 Range() = default;
35 Range(uint inBegin, uint inEnd) : mBegin(inBegin), mEnd(inEnd) { }
36
38 uint Count() const
39 {
40 return mEnd - mBegin;
41 }
42
46 };
47
50 {
51 return Range(0, (uint)mSortedTriangleIdx.size());
52 }
53
59 virtual bool Split(const Range &inTriangles, Range &outLeft, Range &outRight) = 0;
60
62 const VertexList & GetVertices() const
63 {
64 return mVertices;
65 }
66
68 const IndexedTriangle & GetTriangle(uint inIdx) const
69 {
70 return mTriangles[mSortedTriangleIdx[inIdx]];
71 }
72
73protected:
75 bool SplitInternal(const Range &inTriangles, uint inDimension, float inSplit, Range &outLeft, Range &outRight);
76
81};
82
unsigned int uint
Definition: Core.h:309
#define JPH_NAMESPACE_END
Definition: Core.h:240
#define JPH_NAMESPACE_BEGIN
Definition: Core.h:234
Array< Float3 > VertexList
Definition: Float3.h:42
Array< IndexedTriangle > IndexedTriangleList
Definition: IndexedTriangle.h:105
std::vector< T, STLAllocator< T > > Array
Definition: STLAllocator.h:81
Triangle with 32-bit indices and material index.
Definition: IndexedTriangle.h:69
A class that splits a triangle list into two parts for building a tree.
Definition: TriangleSplitter.h:13
bool SplitInternal(const Range &inTriangles, uint inDimension, float inSplit, Range &outLeft, Range &outRight)
Helper function to split triangles based on dimension and split value.
Definition: TriangleSplitter.cpp:28
Array< Float3 > mCentroids
Unsorted centroids of triangles.
Definition: TriangleSplitter.h:79
virtual ~TriangleSplitter()=default
Virtual destructor.
const VertexList & GetVertices() const
Get the list of vertices.
Definition: TriangleSplitter.h:62
const VertexList & mVertices
Vertices of the indexed triangles.
Definition: TriangleSplitter.h:77
virtual void GetStats(Stats &outStats) const =0
Get stats of splitter.
virtual bool Split(const Range &inTriangles, Range &outLeft, Range &outRight)=0
const IndexedTriangleList & mTriangles
Unsorted triangles.
Definition: TriangleSplitter.h:78
Array< uint > mSortedTriangleIdx
Indices to sort triangles.
Definition: TriangleSplitter.h:80
const IndexedTriangle & GetTriangle(uint inIdx) const
Get triangle by index.
Definition: TriangleSplitter.h:68
Range GetInitialRange() const
Range of triangles to start with.
Definition: TriangleSplitter.h:49
Helper struct to indicate triangle range before and after the split.
Definition: TriangleSplitter.h:32
uint mEnd
Definition: TriangleSplitter.h:45
Range(uint inBegin, uint inEnd)
Definition: TriangleSplitter.h:35
uint Count() const
Get number of triangles in range.
Definition: TriangleSplitter.h:38
uint mBegin
Start and end index (end = 1 beyond end)
Definition: TriangleSplitter.h:44
Range()=default
Constructor.
Definition: TriangleSplitter.h:22
int mLeafSize
Definition: TriangleSplitter.h:24
const char * mSplitterName
Definition: TriangleSplitter.h:23