void ProcessAxis(Range range, int axis, NativeArray <float> scores, NativeArray <float4> points, ref int bestAxis, ref int pivot, ref float minScore) { CompareVertices comparator; comparator.SortAxis = axis; points.Sort(comparator); PointAndIndex *p = (PointAndIndex *)PointsAsFloat4 + range.Start; Aabb runningAabb = Aabb.Empty; for (int i = 0; i < points.Length; i++) { runningAabb.Include(Aabbs[p[i].Index]); scores[i] = (i + 1) * runningAabb.SurfaceArea; } runningAabb = Aabb.Empty; for (int i = points.Length - 1, j = 1; i > 0; --i, ++j) { runningAabb.Include(Aabbs[p[i].Index]); float sum = scores[i - 1] + j * runningAabb.SurfaceArea; if (sum < minScore) { pivot = i; bestAxis = axis; minScore = sum; } } }
void ProcessAxis(int rangeLength, int axis, NativeArray <float> scores, NativeArray <float4> points, ref int bestAxis, ref int pivot, ref float minScore) { CompareVertices comparator; comparator.SortAxis = axis; NativeSortExtension.Sort((float4 *)points.GetUnsafePtr(), rangeLength, comparator); PointAndIndex *p = (PointAndIndex *)points.GetUnsafePtr(); Aabb runningAabb = Aabb.Empty; for (int i = 0; i < rangeLength; i++) { runningAabb.Include(Aabbs[p[i].Index]); scores[i] = (i + 1) * runningAabb.SurfaceArea; } runningAabb = Aabb.Empty; for (int i = rangeLength - 1, j = 1; i > 0; --i, ++j) { runningAabb.Include(Aabbs[p[i].Index]); float sum = scores[i - 1] + j * runningAabb.SurfaceArea; if (sum < minScore) { pivot = i; bestAxis = axis; minScore = sum; } } }