35个版本 (18个破坏性更新)
使用旧的Rust 2015
0.18.0 | 2021年1月3日 |
---|---|
0.17.0 | 2019年1月17日 |
0.16.1 | 2018年3月21日 |
0.15.0 | 2017年7月30日 |
0.0.1 | 2014年11月12日 |
#50 in 数学
45,774 每月下载量
用于 409 个crate(244个直接使用)
260KB
6K SLoC
cgmath-rs
计算机图形学用的线性代数和数学库。
该库提供
- 向量:
Vector2
,Vector3
,Vector4
- 方阵:
Matrix2
,Matrix3
,Matrix4
- 四元数类型:
Quaternion
- 旋转矩阵:
Basis2
,Basis3
- 角度单位:
Rad
,Deg
- 点:
Point2
,Point3
- 透视投影:
Perspective
,PerspectiveFov
,Ortho
- 空间变换:
AffineMatrix3
,Transform3
并非所有功能都已实现,现有代码尚未完全覆盖测试套件。如果遇到任何错误或遗漏,请通过提交问题通知我,或者更好的是:发送一个带有修复的pull request。
约定
cgmath将其向量解释为列矩阵(也称为“列向量”),这意味着在矩阵变换向量时,矩阵位于左侧。这反映在cgmath实现了矩阵乘以向量的乘法运算符,但没有向量乘以矩阵的运算符。
特性
混叠
这个库提供了一项名为“swizzling”的可选功能,这是GPU程序员普遍熟悉的功能。要启用swizzle运算符,请将--features="swizzle"
选项传递给cargo。启用此功能将使cgmath库的大小增加约0.6MB。如果库通过在Cargo.toml中将cgmath作为依赖项以“正常”方式链接,则这不是问题,因为这将使cgmath静态链接,所以所有未使用的swizzle运算符将在发布模式下被编译器优化掉。
示例
如果我们有
let v = Vector3::new(1.0, 2.0, 3.0);
那么v.xyxz()
会产生一个
Vector4 { x: 1.0, y: 2.0, z: 1.0, w: 3.0 }
并且v.zy()
会产生一个
Vector2 { x: 3.0, y: 2.0 }
SIMD优化
当前的SIMD支持依赖于已废弃的“simd”包以及不稳定的“specialization”特性。为了构建此代码,需要一个1.33之前的nightly构建的Rust,例如2019-01-01-nightly。虽然目前的代码形式没有用处,但它作为未来迁移的起点具有一定的价值(参见https://github.com/rustgd/cgmath/issues/490)。
限制
cgmath不是一个n维库,而是面向计算机图形学应用的,而不是通用的线性代数。它只提供2、3和4维结构,这足以满足大多数计算机图形学应用的需求。这一设计决策是为了简化实现(Rust不能在编译时对常量进行参数化),并使未来的特定维度优化更容易。
贡献
欢迎pull requests,尤其是在性能提升和修复我可能犯的错误方面。还需要单元测试和基准测试,因此在此方面提供帮助将非常受欢迎。
依赖关系
~130–445KB