30 releases (breaking)
✓ Uses Rust 2018 edition
|0.31.0||Dec 8, 2019|
|0.29.0||Dec 7, 2019|
|0.27.0||Jun 30, 2019|
|0.25.2||May 20, 2018|
|0.5.4||Jan 25, 2017|
#109 in Algorithms
416 downloads per month
3D/2D library written in Rust. Offering useful containers, structures and algorithms for 2D and 3D space. Meant as basis for numeric algorithms, viewers, game engines, ...
Note that the module structure changed. There's now only submodules for
prelude was removed.
If you were using the prelude via
rust_3d::prelude::*; you should now be able to just switch to
If you were using explicit paths such as
rust_3d::filters::combinators::FilterAll you should now use
impls are still part of the module path.
This should make future usage easier, but might be painful for existing users.
rust-3d is still in really early stages, there might come breaking changes with each update.
The test coverage is far from perfect, so you might find some bugs (please report them).
Here's a little overview of some of
The snippets / names might not be up-to-date, so please check
tests/ for compiling examples.
.unwrap() where it's not 100% safe.
There's strong types for everything that might get mixed up easily.
This way e.g. ids of faces can't be mistaken for ids of vertices.
fn edges_of_face(&self, faceid: FId) -> Result<(EId, EId, EId)>;
There's also smart types which restrict the values they can hold.
This way distances can never be
< 0.0, sizes can be enfored to be
> 0.0 etc.
I try and keep all algorithms and types as generic as possible.
- Even rather basic types like
Is2Dare split into several versions:
IsMeshis defined for any vertex type and any number of vertices / face
- There's traits for collections (no need to use
This makes it possible to require as little implementation work as possible if you want to use your own types.
IsFilter<T>can be combined via
IsFilter<T>can be transformed to work for any collection of
IsDirectionField2Dmight be transformed to an
IsFilter<Is2D>, which can then be transformed to an
IO method is defined on traits, so if you implement these, you'll get read/write of different file formats for free.
The documentation is quite good already, come and take a look.
Please take a look at the tests in
tests/. These will be up-to-date and compiling.
I might add extensive tutorials / examples / demo projects in the future.
Feel free to open an issue in case you're missing something or found a bug. Please avoid directly contributing since I might be working on breaking changes or the feature you want to implement. Open an issue or email me beforehand.
MIT (see LICENSE)