Rasagar/Library/PackageCache/com.unity.render-pipelines.core/Runtime/GPUDriven/AABB.cs
2024-08-26 23:07:20 +03:00

49 lines
1.5 KiB
C#

using System;
using UnityEngine;
using Unity.Mathematics;
namespace UnityEngine.Rendering
{
[Serializable]
internal partial struct AABB
{
public float3 center;
public float3 extents; // half the size, must be 0 or greater
public float3 min { get { return center - extents; } }
public float3 max { get { return center + extents; } }
/// <summary>Returns a string representation of the AABB.</summary>
public override string ToString()
{
return $"AABB(Center:{center}, Extents:{extents}";
}
static float3 RotateExtents(float3 extents, float3 m0, float3 m1, float3 m2)
{
return math.abs(m0 * extents.x) + math.abs(m1 * extents.y) + math.abs(m2 * extents.z);
}
public static AABB Transform(float4x4 transform, AABB localBounds)
{
AABB transformed;
transformed.extents = RotateExtents(localBounds.extents, transform.c0.xyz, transform.c1.xyz, transform.c2.xyz);
transformed.center = math.transform(transform, localBounds.center);
return transformed;
}
}
internal static class AABBExtensions
{
public static AABB ToAABB(this Bounds bounds)
{
return new AABB { center = bounds.center, extents = bounds.extents };
}
public static Bounds ToBounds(this AABB aabb)
{
return new Bounds { center = aabb.center, extents = aabb.extents };
}
}
}