You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
A Rust library providing SIMD-accelerated mathematical functions for games, graphics, robotics, and other spatial computing applications.
Example
// See tests/integration_test.rs test_readme_example() for full runnable code.// See tests/integration_test.rs for more examples.use simd_math::*;use std::f32::consts::PI;// Create a 3D vectorlet vector = SimdVec3::from([1.0,0.0,0.0]);// Create a rotation quaternion (90 degrees around Z-axis)let rotation = SimdUnitQuat::from_axis_angle(SimdVec3::from([0.0,0.0,1.0]),PI / 2.0);// Apply rotation to vectorlet rotated_vector = rotation * vector;
Conventions and Quirks
Arrays
We ensure that our algebraic types are convertible to and from Rust arrays. Use arrays in your APIs for simple, math-library-agnostic interfaces. Cf Mujoco.
In the same spirit, we do not expose .x, .y, .z fields on vectors or quaternions. Use indexing (v[0], v[1], v[2]).
This decision further eschews conventions about what is front, up, and right in 3D space, which vary between applications. It also makes it easier to use vectors for non-spatial data, e.g. color.
Boring Algebraic Conventions
Vectors are column vectors. Matrix multiplication is Matrix * Vector.
Matrices are constructed in column-major order, i.e. each argument to Mat3::new is a column.
This is consistent with OpenGL and GLM, but not with most textbook math.
Quaternions are represented as (s, x, y, z) where s is the scalar part. Think s + iv.
We assume a right-handed coordinate system.
TODO
Need easier conversion between scalar types, e.g. SimdUVec2 from [u16; 2] should work.
Need flattening for rects, e.g. into_array() methods on all types?
About
Opinionated Rust SIMD vector math library for spatial computing.