轴对齐包围盒(AABB)构建与碰撞检测的交互式 3D 可视化教学工具
Loading 3D Visualizer...
位置
旋转
缩放
位置
大小
碰撞状态
未碰撞
// AABB 计算
function computeAABB(vertices, transform) {
const min = { x: Infinity, y: Infinity, z: Infinity };
const max = { x: -Infinity, y: -Infinity, z: -Infinity };
for (const vertex of vertices) {
const transformed = applyTransform(vertex, transform);
min.x = Math.min(min.x, transformed.x);
min.y = Math.min(min.y, transformed.y);
min.z = Math.min(min.z, transformed.z);
max.x = Math.max(max.x, transformed.x);
max.y = Math.max(max.y, transformed.y);
max.z = Math.max(max.z, transformed.z);
}
return { min, max };
}
// AABB 碰撞检测
function testAABBCollision(aabb1, aabb2) {
return (
aabb1.min.x <= aabb2.max.x && aabb1.max.x >= aabb2.min.x &&
aabb1.min.y <= aabb2.max.y && aabb1.max.y >= aabb2.min.y &&
aabb1.min.z <= aabb2.max.z && aabb1.max.z >= aabb2.min.z
);
}轴对齐包围盒(AABB)是 3D 图形学和游戏开发中的基础概念。它是最简单的包围体形式,由沿每个轴的最小点和最大点定义,使得碰撞检测极其快速。
这个交互式工具帮助你理解 AABB 如何从 3D 几何体构建,以及它们如何响应变换。你可以尝试不同的形状,调整它们的位置/旋转/缩放,并实时观察 AABB 的更新。
碰撞测试区域演示了 AABB-AABB 相交测试,这是游戏引擎中用于宽相位碰撞检测、空间分割(八叉树)和视锥体剔除的核心技术。
使用 AABB 作为第一阶段宽相位测试,实现高效的碰撞检测系统
使用 AABB 树进行空间分割和动态物体管理
通过测试物体 AABB 是否在相机视锥体内来优化渲染
使用 AABB 作为初步检查,加速射线与物体的相交测试
要构建 AABB,遍历几何体的所有顶点,应用变换矩阵(位置、旋转、缩放),然后计算沿每个轴的最小点和最大点。
如果两个 AABB 在所有三个轴上都有重叠,则它们发生碰撞。对于每个轴,检查是否满足 AABB1.min <= AABB2.max 且 AABB1.max >= AABB2.min。
构建:O(n),其中 n 是顶点数量。碰撞测试:O(1) 常数时间。