射线和AABB相交测试

射线如何和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;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值