3 个不稳定版本
| 0.2.0 | 2024 年 3 月 17 日 |
|---|---|
| 0.1.1 | 2022 年 4 月 16 日 |
| 0.1.0 | 2022 年 4 月 11 日 |
在 WebAssembly 中排名 379
在 2 crates 中使用
445KB
5.5K SLoC
🅼🆄🅽🆄🅼
μNum - 微 3D 数学库
概述
munum 是一个使用 Rust、WebAssembly 和 JavaScript 绑定进行高性能 3D 数学计算的简约数值库。
文档
- Docs.rs: https://docs.rs/munum
- TSDoc: http://andykswong.github.io/munum
安装
[JavaScript] 通过 npm 安装
npm install --save munum
[Rust] 作为 Cargo 依赖项安装
cargo add munum
特性
std- 启用std支持。默认启用。libm- 在no_std环境中使用libm启用与三角函数相关的函数。jsmath- 在no_stdWebAssembly 环境中使用 JS Math 绑定启用与三角函数相关的函数。serde- 启用serde序列化/反序列化实现wasm- 生成 WebAssembly 模块和 WebAssembly 组件(WIP)
使用(JavaScript WebAssembly 绑定)
以下是如何构建透视摄像机视图投影矩阵的示例用法
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);
注意使用 using(在作用域外自动调用 .free())。当使用 JavaScript 绑定时,munum 资源在 WebAssembly 内存中分配,以后需要释放。 munum 使用 FinalizationRegistry 进行自动内存管理,因此不建议使用 using 或 .free() 进行显式内存管理。
使用(纯 JavaScript)
从 munum/js 导入以获取纯 JavaScript 实现。
使用(Rust)
构建透视摄像机视图投影矩阵的示例用法
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;
许可证
本仓库及其内部代码采用MIT许可证。请阅读LICENSE获取更多信息。
依赖项
~390–740KB
~16K SLoC