• 【物理】AABB物理碰撞检测


    什么是AABB?

    AABB,指轴对齐包围盒(Axis-aligned bounding boxes)。在3D空间中,AABB是一个长方体,在2D空间中是一个长方形。特征是面法线皆平行于坐标轴,即当物体旋转时,AABB不会随物体旋转,也因此特性,AABB可以最快判断两物体是否重叠。

    AABB表达

    《实时碰撞检测算法技术》一书中提到3种AABB的表达方式,这里仅举其中最高效,要求存储空间最少的一种——即存储包围盒的中心位置和包围盒的半径(即包围盒边缘到包围盒中心距离的长度):

    struct AABB {
        Vector3 pos;
        Vector3 r;
    }
    

    AABB间的碰撞检测

    AABB是否相交可作图如下:

    其中r为半径,d为两包围盒中心的距离。

    int AABBIntersection(AABB A, AABB B) {
        for(int i=0, i<3, i++){
            if(abs(A.pos-B.pos)>A.r+B.r)   return 0;
        }
        return 1;
    }
    

    AABB和ray之间的碰撞检测

    在游戏中,经常会出现需要检测从某一点发出的射线是否与物体相交。
    具体逻辑与AABB间的的碰撞检测相似,只是将其中一个AABB换成了射线。射线的结构如下:

    struct Ray {
        Vector3 pos;
        Vector3 direction;
    }
    
    

    检测射线与AABB碰撞方程:

    int RayAABBIntersection(Ray R, AABB A) {
        
    
    }
    

  • 相关阅读:
    Angular Material Starter App
    缺少标识符、字符串或数字
    jquery ajax post 传递数组 ,多checkbox 取值
    Circular dependencies cannot exist in RelativeLayout
    第二次作业
    第一次作业
    第一次作业
    软工实践个人总结
    第01组 Beta版本演示
    第01组 Beta冲刺(4/5)
  • 原文地址:https://www.cnblogs.com/liez/p/11965027.html
Copyright © 2020-2023  润新知