您最多选择25个主题
主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
64 行
2.3 KiB
64 行
2.3 KiB
using System;
|
|
using static Unity.Mathematics.math;
|
|
|
|
namespace Unity.Mathematics
|
|
{
|
|
[Serializable]
|
|
public partial struct AABB
|
|
{
|
|
public float3 Center;
|
|
public float3 Extents;
|
|
|
|
public float3 Size { get { return Extents * 2; } }
|
|
|
|
public bool Contains(float3 point)
|
|
{
|
|
if (point[0] < Center[0] - Extents[0])
|
|
return false;
|
|
if (point[0] > Center[0] + Extents[0])
|
|
return false;
|
|
|
|
if (point[1] < Center[1] - Extents[1])
|
|
return false;
|
|
if (point[1] > Center[1] + Extents[1])
|
|
return false;
|
|
|
|
if (point[2] < Center[2] - Extents[2])
|
|
return false;
|
|
if (point[2] > Center[2] + Extents[2])
|
|
return false;
|
|
|
|
return true;
|
|
}
|
|
|
|
public bool Contains(AABB b)
|
|
{
|
|
return Contains(b.Center + float3(-b.Extents.x, -b.Extents.y, -b.Extents.z))
|
|
&& Contains(b.Center + float3(-b.Extents.x, -b.Extents.y, b.Extents.z))
|
|
&& Contains(b.Center + float3(-b.Extents.x, b.Extents.y, -b.Extents.z))
|
|
&& Contains(b.Center + float3(-b.Extents.x, b.Extents.y, b.Extents.z))
|
|
&& Contains(b.Center + float3( b.Extents.x, -b.Extents.y, -b.Extents.z))
|
|
&& Contains(b.Center + float3( b.Extents.x, -b.Extents.y, b.Extents.z))
|
|
&& Contains(b.Center + float3( b.Extents.x, b.Extents.y, -b.Extents.z))
|
|
&& Contains(b.Center + float3( b.Extents.x, b.Extents.y, b.Extents.z));
|
|
}
|
|
|
|
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;
|
|
}
|
|
|
|
public float DistanceSq(float3 point)
|
|
{
|
|
return lengthsq(max(abs(point - Center), Extents) - Extents);
|
|
}
|
|
}
|
|
}
|