Skip to content

tsnl/simd_math

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

28 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

simd_math

CI Publish

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 vector
let 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 vector
let 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.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages