3 个不稳定版本

0.2.0 2024 年 3 月 17 日
0.1.1 2022 年 4 月 16 日
0.1.0 2022 年 4 月 11 日

WebAssembly 中排名 379


2 crates 中使用

MIT 许可证

445KB
5.5K SLoC

TypeScript 3K SLoC // 0.1% comments Rust 2K SLoC // 0.0% comments JavaScript 71 SLoC // 0.2% comments

🅼🆄🅽🆄🅼

μNum - 微 3D 数学库


license: MIT Docs.rs Crates.io npm codecov build

概述

munum 是一个使用 Rust、WebAssembly 和 JavaScript 绑定进行高性能 3D 数学计算的简约数值库。

文档

安装

[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