// Test if AABB b intersects plane p intTestAABBPlane(AABB b, Plane p) { // Convert AABB to center-extents representation Point c = (b.max + b.min) * 0.5f; // Compute AABB center Point e = b.max - c; // Compute positive extents
// Compute the projection interval radius of b onto L(t) = b.c + t * p.n float r = e[0]*Abs(p.n[0]) + e[1]*Abs(p.n[1]) + e[2]*Abs(p.n[2]);
// Compute distance of box center from plane float s = Dot(p.n, c) - p.d;
// Intersection occurs when distance s falls within [-r,+r] interval return Abs(s) <= r; }
让我们来解析这段代码
函数传入了目标 Mesh 的 AABB,和目标平面
进入后的两行假设你的 AABB 是用 max/min 表示的,如果你可以轻松调取 AABB 的 center 和 extents,那么这两行是可以被跳过的