您最多选择25个主题
主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
52 行
1.4 KiB
52 行
1.4 KiB
using System.Runtime.CompilerServices;
|
|
using UnityEngine;
|
|
using static Unity.Mathematics.math;
|
|
namespace CollisionLib
|
|
{
|
|
using Unity.Mathematics;
|
|
using Primitives;
|
|
|
|
public static partial class coll
|
|
{
|
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
public static bool RayCast(sphere sphere, ray ray, float rayDist)
|
|
{
|
|
var rayEnd = ray.origin + ray.direction * rayDist;
|
|
var closestPoint = ClosestPointOnLineSegment(ray.origin, rayEnd, sphere.center);
|
|
|
|
var dist = distance(closestPoint, sphere.center);
|
|
return dist < sphere.radius;
|
|
}
|
|
|
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
public static void ProjectPointToLineSegment(float3 lineStart, float3 lineEnd, float3 point, out float t)
|
|
{
|
|
var v = lineStart - lineEnd;
|
|
t = dot(point - lineStart, v) / dot(v, v);
|
|
}
|
|
|
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
public static float3 closest(lineseg lineseg, float3 point)
|
|
{
|
|
return ClosestPointOnLineSegment(lineseg.start, lineseg.end, point);
|
|
}
|
|
|
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
public static float3 ClosestPointOnLineSegment(float3 lineStart, float3 lineEnd, float3 point)
|
|
{
|
|
var v = lineEnd - lineStart;
|
|
var t = dot(point - lineStart, v) / dot(v, v);
|
|
t = max(t, 0.0f);
|
|
t = min(t, 1.0f);
|
|
return lineStart + v * t;
|
|
}
|
|
|
|
|
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
public static float SqrLineSegmentDist(lineseg line1, lineseg line2)
|
|
{
|
|
|
|
return 1;
|
|
}
|
|
}
|
|
}
|