959e80cf72
assets upload description.
64 lines
1.8 KiB
C#
64 lines
1.8 KiB
C#
using UnityEngine;
|
|
using AwesomeTechnologies.MeshTerrains;
|
|
using Unity.Mathematics;
|
|
|
|
namespace AwesomeTechnologies.Utility.BVHTree
|
|
{
|
|
[System.Serializable]
|
|
// ReSharper disable once InconsistentNaming
|
|
public class BVHBBox
|
|
{
|
|
public Vector3 Center = Vector3.zero;
|
|
public Vector3 Min = Vector3.one * float.MaxValue;
|
|
public Vector3 Max = Vector3.one * -float.MaxValue;
|
|
|
|
public static bool IntersectRay(BVHRay r, float3 min, float3 max, out float hitDist)
|
|
{
|
|
float tXmin, tXmax, tYmin, tYmax, tZmin, tZmax;
|
|
float xA = 1f / r.Direction.x, yA = 1f / r.Direction.y, zA = 1f / r.Direction.z;
|
|
float xE = r.Origin.x, yE = r.Origin.y, zE = r.Origin.z;
|
|
|
|
// calculate t interval in x-axis
|
|
if (xA >= 0)
|
|
{
|
|
tXmin = (min.x - xE) * xA;
|
|
tXmax = (max.x - xE) * xA;
|
|
}
|
|
else
|
|
{
|
|
tXmin = (max.x - xE) * xA;
|
|
tXmax = (min.x - xE) * xA;
|
|
}
|
|
|
|
// calculate t interval in y-axis
|
|
if (yA >= 0)
|
|
{
|
|
tYmin = (min.y - yE) * yA;
|
|
tYmax = (max.y - yE) * yA;
|
|
}
|
|
else
|
|
{
|
|
tYmin = (max.y - yE) * yA;
|
|
tYmax = (min.y - yE) * yA;
|
|
}
|
|
|
|
// calculate t interval in z-axis
|
|
if (zA >= 0)
|
|
{
|
|
tZmin = (min.z - zE) * zA;
|
|
tZmax = (max.z - zE) * zA;
|
|
}
|
|
else
|
|
{
|
|
tZmin = (max.z - zE) * zA;
|
|
tZmax = (min.z - zE) * zA;
|
|
}
|
|
|
|
var tMin = math.max(tXmin, math.max(tYmin, tZmin));
|
|
var tMax = math.min(tXmax, math.min(tYmax, tZmax));
|
|
|
|
hitDist = tMin;
|
|
return (tMin <= tMax);
|
|
}
|
|
}
|
|
} |