Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
godotengine
GitHub Repository: godotengine/godot
Path: blob/master/thirdparty/jolt_physics/Jolt/TriangleSplitter/TriangleSplitterBinning.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/TriangleSplitter/TriangleSplitter.h>
8
#include <Jolt/Geometry/AABox.h>
9
10
JPH_NAMESPACE_BEGIN
11
12
/// Binning splitter approach taken from: Realtime Ray Tracing on GPU with BVH-based Packet Traversal by Johannes Gunther et al.
13
class JPH_EXPORT TriangleSplitterBinning : public TriangleSplitter
14
{
15
public:
16
/// Constructor
17
TriangleSplitterBinning(const VertexList &inVertices, const IndexedTriangleList &inTriangles, uint inMinNumBins = 8, uint inMaxNumBins = 128, uint inNumTrianglesPerBin = 6);
18
19
// See TriangleSplitter::GetStats
20
virtual void GetStats(Stats &outStats) const override
21
{
22
outStats.mSplitterName = "TriangleSplitterBinning";
23
}
24
25
// See TriangleSplitter::Split
26
virtual bool Split(const Range &inTriangles, Range &outLeft, Range &outRight) override;
27
28
private:
29
// Configuration
30
const uint mMinNumBins;
31
const uint mMaxNumBins;
32
const uint mNumTrianglesPerBin;
33
34
struct Bin
35
{
36
// Properties of this bin
37
AABox mBounds;
38
float mMinCentroid;
39
uint mNumTriangles;
40
41
// Accumulated data from left most / right most bin to current (including this bin)
42
AABox mBoundsAccumulatedLeft;
43
AABox mBoundsAccumulatedRight;
44
uint mNumTrianglesAccumulatedLeft;
45
uint mNumTrianglesAccumulatedRight;
46
};
47
48
// Scratch area to store the bins
49
Array<Bin> mBins;
50
};
51
52
JPH_NAMESPACE_END
53
54