Path: blob/master/thirdparty/jolt_physics/Jolt/TriangleSplitter/TriangleSplitterBinning.h
9912 views
// Jolt Physics Library (https://github.com/jrouwe/JoltPhysics)1// SPDX-FileCopyrightText: 2021 Jorrit Rouwe2// SPDX-License-Identifier: MIT34#pragma once56#include <Jolt/TriangleSplitter/TriangleSplitter.h>7#include <Jolt/Geometry/AABox.h>89JPH_NAMESPACE_BEGIN1011/// Binning splitter approach taken from: Realtime Ray Tracing on GPU with BVH-based Packet Traversal by Johannes Gunther et al.12class JPH_EXPORT TriangleSplitterBinning : public TriangleSplitter13{14public:15/// Constructor16TriangleSplitterBinning(const VertexList &inVertices, const IndexedTriangleList &inTriangles, uint inMinNumBins = 8, uint inMaxNumBins = 128, uint inNumTrianglesPerBin = 6);1718// See TriangleSplitter::GetStats19virtual void GetStats(Stats &outStats) const override20{21outStats.mSplitterName = "TriangleSplitterBinning";22}2324// See TriangleSplitter::Split25virtual bool Split(const Range &inTriangles, Range &outLeft, Range &outRight) override;2627private:28// Configuration29const uint mMinNumBins;30const uint mMaxNumBins;31const uint mNumTrianglesPerBin;3233struct Bin34{35// Properties of this bin36AABox mBounds;37float mMinCentroid;38uint mNumTriangles;3940// Accumulated data from left most / right most bin to current (including this bin)41AABox mBoundsAccumulatedLeft;42AABox mBoundsAccumulatedRight;43uint mNumTrianglesAccumulatedLeft;44uint mNumTrianglesAccumulatedRight;45};4647// Scratch area to store the bins48Array<Bin> mBins;49};5051JPH_NAMESPACE_END525354