5 个版本 (稳定)
1.1.2 | 2024年2月28日 |
---|---|
1.1.1 | 2024年1月12日 |
1.0.0 | 2023年11月11日 |
0.1.0 | 2023年8月9日 |
#147 in 数学
379 每月下载量
5.5MB
3K SLoC
libnoise
受 C++ 的 libnoise 启发的简单、高效且可定制的程序化噪声生成库,具有以下特点:
- 通过
Source
提供的源实现简单的连贯噪声生成 - 通过链式适配器创建模块化生成器,以修改和组合生成器的输入和输出,并通过
Generator
特性灵活创建自定义生成器和适配器 - 通过
NoiseBuffer
高效且缓存友好的采样生成器,大多数生成器复杂性在编译时解决 - 通过
Visualizer
轻松可视化生成器输出,便于调试
Libnoise 提供生成连贯噪声的实用工具,并可通过应用各种操作来定制它们,这些操作可以修改和组合生成器。该库专注于可定制性,允许用户创建自定义生成器和修饰符。
最相关的文档可以在 文档 中找到,具体请参考 Source
和 Generator
。
使用方法
首先,通过编辑您的 Cargo.toml
将依赖项添加到您的项目中
[dependencies]
libnoise = "1.1"
为了快速入门,使用 Source
中找到的许多源之一创建一个源生成器,并应用 Generator
文档中记录的适配器。有关更详细的介绍,请参阅 快速入门指南。
use libnoise::prelude::*;
// build a simplex noise generator seeded with 42
let generator = Source::simplex(42);
// sample the generator for input point [0.2, 0.5]
let value = generator.sample([0.2, 0.5]);
注意维度,它作为常量泛型参数内部表示,通过用二维输入点采样生成器来自动推断。
当然,我们可以创建更多有趣的复杂生成器
use libnoise::prelude::*;
// build a generator
let generator = Source::simplex(42) // start with simplex noise
.fbm(5, 0.013, 2.0, 0.5) // apply fractal brownian motion
.blend( // apply blending...
Source::worley(43).scale([0.05, 0.05]), // ...with scaled worley noise
Source::worley(44).scale([0.02, 0.02])) // ...controlled by other worley noise
.lambda(|f| (f * 2.0).sin() * 0.3 + f * 0.7); // apply a closure to the noise
// sample the generator for input point [0.2, 0.5]
let value = generator.sample([0.2, 0.5]);
我们还可以使用 NoiseBuffer
来高效地用噪声填充 n 维数组,以及使用 Visualizer
来获取给定生成器的视觉表示。上述生成器在采样每个像素位置时产生以下图像
通常将第 3 或 4 维解释为时间,这样我们就可以生成时空噪声,例如
贡献
欢迎贡献者和功能建议!
如果您想直接联系我,最佳方式是通过 discord(用户名:oogie)。
许可
Libnoise 在 MIT 许可证的条款下分发。
有关详细信息,请参阅 LICENSE-MIT。
依赖项
~0.8–14MB
~123K SLoC