# Box 带变换的有向包围盒 (OBB) 结构体。 ## 头文件 ```cpp #include ``` ## 命名空间 `XCEngine::Math` ## 结构体定义 ```cpp struct Box { Vector3 center = Vector3::Zero(); Vector3 extents = Vector3::Zero(); // 半长 Matrix4x4 transform = Matrix4x4::Identity(); }; ``` OBB 由中心点、半长向量和变换矩阵定义。 ## 构造函数 - `Box()` - 默认构造 - `Box(const Vector3& center, const Vector3& extents)` - 从中心和半长构造 ## 实例方法 | 方法 | 返回值 | 描述 | |------|--------|------| | `GetMin()` | `Vector3` | 局部空间最小点 (-extents) | | `GetMax()` | `Vector3` | 局部空间最大点 (+extents) | | `Contains(point)` | `bool` | 点是否在盒内(变换到局部空间检测) | | `Intersects(Sphere)` | `bool` | 与球体相交 | | `Intersects(Box)` | `bool` | 与另一个 OBB 相交(SAT 算法) | | `Intersects(Ray, t)` | `bool` | 与射线相交,输出距离 t | ## 使用示例 ```cpp Box box(Vector3(0.0f), Vector3(1.0f)); // 2x2x2 盒子 box.transform = Matrix4::TRS(position, rotation, scale); // 点检测 if (box.Contains(testPoint)) { ... } // 球体相交 if (box.Intersects(sphere)) { ... } // OBB 相交 if (box.Intersects(otherBox)) { ... } // 射线相交 float t; if (box.Intersects(ray, t)) { Vector3 hit = ray.GetPoint(t); } ```