Skip to content

ranjeethmahankali/alum

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

50 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Alum: A Halfedge based Polygon Mesh Library

CI Documentation Crate Examples with three_d

Standford Bunny

This library is inspired by OpenMesh, hence has an API very similar to that of OpenMesh. I love using OpenMesh in C++, and wrote this library because I couldn't find an equivalent in Rust. Huge thanks to OpenMesh and it's maintainers for the inspiration!

For now, the features of this library exist to serve my other projects. It has full parity with the OpenMesh/Core module, and has partial parity with the OpenMesh/Tools module, and new features will be added as required by my other projects.

Installation

This can be added to a Rust project as a dependency from crates.io with:

cargo add alum

Or by adding the following to your Cargo.toml:

[dependencies]
alum = "0.6.1"

Usage and Features

This library uses glam out of the box for geometric types such as points, normals etc. These are enabled by the use_glam feature and can be disabled if you don't want to use glam.

You can use this library with your own geometric types for points and normals etc. by implementing an adaptor that tells this library how to work with your geometric types. Read the documentation to learn more about this. These examples demonstrate writing custom adaptors and rendering and using various features of this crate together with three_d

Subdivision

Mesh subdivision is available under the "subdiv" feature. Catmull-Clark, Loop, and Sqrt3 subdivision schemes are implemented. This example demonstrates all three decimation schemes.

Decimation

Decimation is implemented with an architecture very similar to that of OpenMesh, and is available under the "decimate" feature. You can write your own implementation of the Decimater trait, to decimate the mesh with a custom heuristic. The library does come with some commonly useful decimater implementations. More maybe added later. This example demonstrates the decimation of a mesh using the probabilistic quadric minimizing decimater.

Property System

This library also comes with a property system just like the one in OpenMesh, with some small improvements and differences. The properties are always synchronized with the mesh elements, through additions, deletions and garbage collections which result in reordering of elements. Unlike properties in OpenMesh, the properties here use interior mutability with RefCell<T> and enforce runtime borrow checking rules. Read the documentation to learn more.

About

Halfedge mesh library in Rust

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages