射线如何和AABB做相交测试呢?
下面以 2D 空间下距离:
首先要明确定义:
1.射线
起始点:origin(Vector2)
方向:dir(Vector2)
class Ray
{
Vector2 origin;
Vector2 dir;
}
2.AABB
定义方式有很多种,此处就用边界值
class AABB
{
Vector2 min;
Vector2 max;
}
如何检测相交?
1.求射线和 AABB 各个轴极值的交点
2.看交点是否在 AABB 范围内
如图所示:
绿色左右分别是x最大和最小值的交点(如果不在边界内需要延伸)
黄色是y最大和最小值的交点
因为有x最小点 和 y最大点在 AABB内,所以相交成立
那如何求交点?
起始就是一个等比例转换的关系
1.先得到长度
2.使用加法,origin+ dir * 长度,就是坐标
(其他轴的类型,就是吧minX换成 maxX、minY、maxY)
然后判断交点是否在AABB内,这个就简单了
只需要和xy比较即可
//计算方法
return x>=min.x && x<=max.x && y>=min.y && y<=max.y;