3.5 KiB
3.5 KiB
Math
命名空间: XCEngine::Math
类型: submodule
描述: 定义向量、矩阵、四元数、颜色和基础几何体等运行时数学类型。
概览
Core/Math 是引擎运行时的基础数学层。它承载了场景变换、摄像机矩阵、包围体计算、颜色处理和几何查询依赖的核心类型。
从结构上看,它大致分成几层:
- 标量常量与角度辅助:Math
- 向量:Vector2、Vector3、Vector4
- 旋转与矩阵:Quaternion、Matrix3、Matrix4
- 颜色、变换和几何体:
Color、Transform、Plane、Ray、Bounds、Frustum等
这套 API 的设计方向很接近商业引擎常见的运行时 math layer,但当前不同类型成熟度并不完全一致。向量、Matrix4 和 Quaternion 已经比较可用;部分几何类型和个别矩阵构造路径仍然需要结合源码行为理解。
设计要点
- 当前所有基础数学类型都采用公开字段和轻量值类型设计。
- 大部分函数是静态工厂或内联运算,倾向直接可读而不是极限泛型化。
- 若和 Unity 风格类比:
Vector3/Quaternion/Matrix4的心智模型比较接近 Unity 同名类型- 但具体行为仍应以当前源码为准,而不是默认等同 Unity
- 当前数学层默认不做运行时边界检查,例如向量和矩阵的
operator[]都没有保护。
当前实现现状
Lerp()在当前向量实现里会 clampt到[0, 1],不是无界线性插值。MultiplyPoint()当前只是把点乘以齐次矩阵并直接取x/y/z,不会做透视除法。Matrix4::Inverse()与Matrix3::Inverse()在奇异矩阵情况下都会返回Identity(),不会报错。Matrix3::RotationX/Y/Z()当前实现从零矩阵开始填值,未设置的主对角项保持为0,这会让结果和标准旋转矩阵不同。
头文件
- AABB -
AABB.h - Bounds -
Bounds.h - Box -
Box.h - Color -
Color.h - Frustum -
Frustum.h - Math -
Math.h - Matrix3 -
Matrix3.h - Matrix4 -
Matrix4.h - Plane -
Plane.h - Quaternion -
Quaternion.h - Ray -
Ray.h - Rect -
Rect.h - Sphere -
Sphere.h - Transform -
Transform.h - Vector2 -
Vector2.h - Vector3 -
Vector3.h - Vector4 -
Vector4.h
推荐阅读顺序
- 先读 Math,确认常量、角度换算和
EPSILON约定。 - 再读 Vector3 与 Quaternion,这是变换和空间计算最常用的两类。
- 然后读 Matrix4,理解当前矩阵乘法、投影和分解约定。
- 需要二维或齐次向量时再补 Vector2 与 Vector4。