7个版本
0.1.6 | 2019年8月14日 |
---|---|
0.1.5 | 2019年8月14日 |
#691 in 游戏开发
615KB
20K SLoC
ico_math
为Rust中的游戏和图形设计的有观点的SIMD数学库。
该库的目标是简化底层游戏引擎功能开发,同时提供用户友好的界面,以实现常见的数学运算,而不牺牲性能。
该库仍在开发中,可能会有所变化。单元测试覆盖率和文档尚未完成。尽可能详细地记录了错误界限(例如,SSE sin、cos、acos近似)。
特性
Ico Math支持标准原生类型(Vector2、Vector3、Vector4、Quaternion、Matrix4x4、DualQuaternion),以及本地SIMD整数类型(Vector2Int、Vector3Int、Vector4Int)、布尔掩码(Vector2Bool、Vector3Bool、Vector4Bool)和广播类型(FloatVector、IntVector),其中所有元素都是相同的。
此外,该库还提供了对齐的原始向量类型,用于加载/存储操作。
该库还提供了一套完整的CG风格混洗运算符,例如vec.zwxy()或vec.xxyy()。
要求和依赖关系
- 仅使用core::arch::x86_64模块。
- 没有外部依赖。
- #![no_std]
- 需要FMA和SSE 4.1
约定
- 右手坐标系
- 列主序
- 除非指定,否则使用弧度
- 除非指定,否则相等性是按位(例如,Vector3.approx_equals()是近似的)。
该库在类型安全上采取了一种折中方案。Vector2、Vector3、Vector4和Quaternion是具体类型。出于性能考虑,有单独的基于整数的Vector2Int、Vector3Int和Vector4Int类型。但是,没有'点'类型,也没有'radian'或'degree'类型。
大多数方法需要显式转换为正确类型,提供了大多数类型之间的转换。唯一例外是按位运算符,它允许任何相同大小的向量类型(int、bool、float)之间的操作。允许Vector3Int XOR Vector3,但不允许Vector2 XOR Vector3。
向上转换(从Vector2到Vector4)始终将附加通道(zw,在这种情况下)初始化为零。向下转换(Vector4到Vector2)不初始化通道。
未来工作
- 编码加载/存储操作(16 uint等)。
- 额外的矩阵方法和类型。
- 接受const参数的位移方法(没有const泛型)。
- 更多的单元测试覆盖(特别是布尔和矩阵)。
- 更多的文档。
- 性能测试。
- 基本的物理。
- 通过使用impl trait减少代码重复,并受内联行为分析的限制。
反馈
我是Rust的新手,当然有一些地方我可以做得更好。我欢迎反馈,并喜欢收到错误报告。
目前有大量的代码重复,一旦我能够验证内联性能后,我打算将其移除。我抵制宏以保持可读性。
ico是什么意思?
ico是二十面体的简称,二十面体是一种有20个面的多面体。也是我LLC的名字。
版权所有 2019 二十面体LLC
此源代码形式受Mozilla公共许可证第2.0版本的约束。如果此文件未附带MPL副本,您可以在https://mozilla.org/MPL/2.0/获取。