WX-Game1/Assets/Samples/Unity Physics/1.3.10/Custom Physics Authoring/Unity.Physics.Custom/Utilities/ConvexHullGenerationParamet...

51 lines
2.1 KiB
C#

using System;
using Unity.Collections;
using Unity.Mathematics;
namespace Unity.Physics.Authoring
{
public static class ConvexHullGenerationParametersExtensions
{
// recommended simplification tolerance is at least 1 centimeter
internal const float k_MinRecommendedSimplificationTolerance = 0.01f;
internal static void InitializeToRecommendedAuthoringValues(
ref this ConvexHullGenerationParameters generationParameters, NativeArray<float3> points
)
{
generationParameters = ConvexHullGenerationParameters.Default.ToAuthoring();
if (points.Length <= 1)
return;
var bounds = new Aabb { Min = points[0], Max = points[0] };
for (var i = 1; i < points.Length; ++i)
bounds.Include(points[i]);
generationParameters.SimplificationTolerance = math.max(
k_MinRecommendedSimplificationTolerance,
ConvexHullGenerationParameters.Default.SimplificationTolerance * math.cmax(bounds.Extents)
);
// TODO: initialize other properties based on input points?
}
internal static void OnValidate(ref this ConvexHullGenerationParameters generationParameters, float maxAngle = 180f)
{
generationParameters.SimplificationTolerance = math.max(0f, generationParameters.SimplificationTolerance);
generationParameters.BevelRadius = math.max(0f, generationParameters.BevelRadius);
generationParameters.MinimumAngle = math.clamp(generationParameters.MinimumAngle, 0f, maxAngle);
}
public static ConvexHullGenerationParameters ToAuthoring(this ConvexHullGenerationParameters generationParameters)
{
generationParameters.MinimumAngle = math.degrees(generationParameters.MinimumAngle);
return generationParameters;
}
public static ConvexHullGenerationParameters ToRunTime(this ConvexHullGenerationParameters generationParameters)
{
generationParameters.MinimumAngle = math.radians(generationParameters.MinimumAngle);
return generationParameters;
}
}
}