munum v0.2.1
Overview
munum is a minimalistic numerical library for high-performance 3D math with Rust, WebAssembly and JavaScript bindings.
Documentation
- Docs.rs: https://docs.rs/munum
- TSDoc: http://andykswong.github.io/munum
Install
JavaScript Install via npm:
npm install --save munumRust Install as Cargo dependency:
cargo add munumFeatures:
std- enablesstdsupport. enabled by default.libm- enables trigonometry related functions inno_stdenvironment usinglibm.jsmath- enables trigonometry related functions inno_stdWebAssembly environment using JS Math binding.serde- enablesserdeserialize/deserialize implementationswasm- produces WebAssembly module and WebAssembly component (WIP)
Usage (JavaScript WebAssembly binding)
Sample usage to build a perspective camera view-projection matrix below:
import { lookAt, perspective, Mat4, Vec3 } from 'munum'; // Or load from CDN, e.g. 'https://unpkg.com/munum@latest'
using eye = new Vec3(1, 1, 1);
using target = new Vec3(0, 0, 0);
using up = new Vec3(0, 1, 0);
const view = lookAt(eye, target, up);
const aspectRatio = width / height;
const yfov = Math.PI / 4;
const znear = 1;
const zfar = 100;
using viewProj = perspective(aspectRatio, yfov, znear, zfar).mul(view);Note the use of using (which automatically calls .free() when out of scope). When using JavaScript binding, munum resources are allocated on WebAssembly memory which need to be deallocated later. munum uses FinalizationRegistry for automatic memory management, so explicit memory management with using or .free() is not required through recommended.
Usage (Pure JavaScript)
Import from munum/js for pure JavaScript implementation.
Usage (Rust)
Sample usage to build a perspective camera view-projection matrix:
use core::f32::{consts::PI, INFINITY};
use munum::{transform, vec3};
let eye = vec3(0_f32, 2., 0.);
let target = vec3(0., 0.6, 0.);
let up = vec3(0., 0., -1.);
let view = transform::look_at(eye, target, up);
let proj = transform::perspective(2., PI/2., 1., INFINITY);
let view_proj = proj * view;License
This repository and the code inside it is licensed under the MIT License. Read LICENSE for more information.