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_std
WebAssembly 环境中使用 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