# rust-gml Graphics Math Library. A vector and matrix library for Rust targeting low level graphics operations. Similar to C++ libraries glm, cml, MathGeoLib, Eigen, CGGeometry from Cocoa, and others. It may be useful to anyone working with low level graphic operations in Rust. This library was created to determine if header-only generic template C++ libraries such as you would find in Boost, glm.g-truc.net, and the like could be implemented in a simpler fashion in Rust with less boilerplate while maintaining performance. After several iterations we are fairly happy with the result. Version 1.0 of this library (gml) implements a complete and tested fully generic vector and matrix library, modelled after the functionality found in the OpenGL shader language, the C++ library GLM, and the math portion of the Unity game engine. With OpenGL or DirectX bindings (not included here) and this library you can be coding up spinning 3D geometries with Rust in no time. ## Documentation Documentation may be found at [CreekWare/OpenSource/gml](http://creekware.com/rust-gml/doc/gml/index.html) Alternatively, documentation may be generated by cloning a local copy of this project on a machine with Rust 1.xx installed, using `cargo doc` to generate the documentation, and finally `cargo doc --open` to view the documentation in your web browser. ## Versioning Version 1.0.0 represents a stable and tested API. The third digit (ie from 1.0.0 to 1.0.1) represents minor revisions, bug fixes and the like. The second digit (ie from 1.0.23 to 1.1.0) represents significant backwards compatible feature additions. The first digit (ie from 1.3.43 to 2.0.0) represents breaking API changes. Development prior to 1.0.0 was performed using a private repository. ## Usage To use the currently released version from crates.io (recommended), add this to your `Cargo.toml`: ```toml [dependencies] gml = "*" ``` or to use the latest version from the github repository, add this instead to your `Cargo.toml`: ```toml [dependencies.gml] git = "https://github.com/creekware/rust-gml.git" ``` and this to your crate root: ```rust extern crate gml; ``` ### Hello Vector Example ```rust extern crate gml; fn main() { let a = gml::Vector3::new(2.0, 5.0, 7.0); let b = gml::Vector3::new(11.0, -32.0, 14.0); let c = a + b; println!("Hello from gml. c={:?}", c); } ``` ## Contributing Discussions on how to implement these features using Rust in a simpler or perhaps more performant fashion are welcome, as are bug fixes or feature additions within the scope of the library. A variety of additional features cherry picked from the C++ reference libraries will be added as time permits.