1.2D隐式直线上的最近点
直线L:p*n = d, 距离直线L上的一点q最近的点q1 = q + (d - q*n)n;
和直线平行的为q*n = Dm,n为法向量,简单解释就是,将q沿着法向量方向移动d-dm个单位距离
2.参数射线上的最近点
射线L: p(t) = Porg + td;向量投影,即需要求出t,t是一个向量在另外一个向量上的投影,
3.平面上的最近点
同1,隐式直线上的最近点
4.圆或球上的最近点
qm = q + (||d|| - r) * d / ||d||,圆或球外一点距离最近的点(到圆心的距离和半径的比例)
5.AABB上的最近点
AABB有两个特别特殊的点,Pmin和Pmax,x,y,z的三个范围值
6.相交性检测
静态检测:检测两个静止图元是否相交
动态测试:检测两个运动图元是否相交,这个值不是唯一的,而是一个和时间有关的动态的结果,即可能在某一个时间点相交,但还可能是在另外一个时间点不相交
7.在2D中两条隐式直线的相交性检测
两条直线的方程组求解
8.在3D中两条射线的相交性检测
9.射线与平面的相交性检测
10.AABB和平面的相交性检测
用AABB的八个顶点和平面的法向量进行点积,比较结果如果都大于0或者小于0,则说明在平面的一侧,如果有的大于0有的小于0,这说明平面穿过了AABB,八个顶点不必都进行检测,可以进行优化
11.三个平面的相交性检测
三个平面的向量表示的方程求解,根据分母是否为0判断有多少交点
12.射线和圆/球的相交性检测
计算球心或者圆心到射线的距离和半径进行比较,能知道射线是否和圆相交
13.两个圆/球的相交性检测
静止:圆心或者球心的距离和半径和作比较
动态:将其中一个看成不动的,将两个运动向量组合
14.球和AABB的相交性检测
AABB和球心最近的点和半径作比较
15.球和平面的相交性检测
球心到平面的距离和半径作比较
16.射线和三角形的相交性检测
计算出射线和三角形平面的交点,判断这个点是否在三角形内
tips:今早的进行一些检查,early out,昂贵的计算尽可能延迟调用和计算
17.射线和AABB的相交性检测
先判断射线会和哪个面相交,再通过射线和面的相交性检测来判断
18.两个AABB的相交性检测
静止比较好判断,运动的要将他投影到某个轴上,也就是降维
19.OBB判断两个AABB是否相交
两个凸包多边形,当且仅当存在一条线,这两个多边形在这条线上的投影不相交,则这两个多边形也不相交.
网友评论