Path: blob/master/thirdparty/jolt_physics/Jolt/TriangleSplitter/TriangleSplitterMean.cpp
9906 views
// Jolt Physics Library (https://github.com/jrouwe/JoltPhysics)1// SPDX-FileCopyrightText: 2021 Jorrit Rouwe2// SPDX-License-Identifier: MIT34#include <Jolt/Jolt.h>56#include <Jolt/TriangleSplitter/TriangleSplitterMean.h>78JPH_NAMESPACE_BEGIN910TriangleSplitterMean::TriangleSplitterMean(const VertexList &inVertices, const IndexedTriangleList &inTriangles) :11TriangleSplitter(inVertices, inTriangles)12{13}1415bool TriangleSplitterMean::Split(const Range &inTriangles, Range &outLeft, Range &outRight)16{17const uint *begin = mSortedTriangleIdx.data() + inTriangles.mBegin;18const uint *end = mSortedTriangleIdx.data() + inTriangles.mEnd;1920// Calculate mean value for these triangles21Vec3 mean = Vec3::sZero();22for (const uint *t = begin; t < end; ++t)23mean += Vec3::sLoadFloat3Unsafe(mCentroids[*t]);24mean *= 1.0f / inTriangles.Count();2526// Calculate deviation27Vec3 deviation = Vec3::sZero();28for (const uint *t = begin; t < end; ++t)29{30Vec3 delta = Vec3::sLoadFloat3Unsafe(mCentroids[*t]) - mean;31deviation += delta * delta;32}33deviation *= 1.0f / inTriangles.Count();3435// Calculate split plane36uint dimension = deviation.GetHighestComponentIndex();37float split = mean[dimension];3839return SplitInternal(inTriangles, dimension, split, outLeft, outRight);40}4142JPH_NAMESPACE_END434445