#simd #noise #bindings #perlin #procedural

sys fastnoise2-sys

FastNoise2的Rust绑定

1个不稳定版本

0.1.1 2024年8月14日
0.1.0 2024年8月14日

#1323硬件支持

Download history 208/week @ 2024-08-10

每月 208 次下载
用于 fastnoise2

MIT 许可证

180KB
4K SLoC

C++ 4K SLoC // 0.0% comments GLSL 102 SLoC // 0.1% comments Rust 82 SLoC // 0.1% comments Bitbake 10 SLoC

fastnoise2

Crates.io License Crates.io Version docs.rs

fastnoise2提供了一个易于使用且大部分安全的接口,用于FastNoise2 C++库,该库使用SIMD提供基于模块化节点图噪声生成。

NoiseTool Node Tree

此crate作为fastnoise2-sys的包装,即FastNoise2的不安全绑定。

示例

以下是一个由FastNoise2的NoiseTool导出的编码节点树的示例。

use fastnoise2::FastNoise;

let (x_size, y_size) = (1000, 1000);
let encoded_node_tree = "EQACAAAAAAAgQBAAAAAAQBkAEwDD9Sg/DQAEAAAAAAAgQAkAAGZmJj8AAAAAPwEEAAAAAAAAAEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAM3MTD4AMzMzPwAAAAA/";
let node = FastNoise::from_encoded_node_tree(encoded_node_tree).unwrap();

// Allocate a buffer of enough size to hold all output data.
let mut noise_out = vec![0.0; (x_size * y_size) as usize];

// SAFETY: for now, it has to be unsafe, see the examples for more details.
let min_max = unsafe {
    node.gen_uniform_grid_2d_unchecked(
        &mut noise_out,
        -x_size / 2, // x offset
        -y_size / 2, // y offset
        x_size,
        y_size,
        0.01, // frequency
        1337, // seed
    )
};

// use `noise_out`!

您还可以使用FastNoise2的元数据系统手动编码一个节点树。有关更多信息,请参阅examples

设置

fastnoise2-sys,fastnoise2的基础绑定,使用一个构建脚本,该脚本遵循特定的顺序来编译和/或链接FastNoise2库

  1. 从源代码构建,如果启用了build-from-source功能。
  2. 如果将环境变量FASTNOISE2_LIB_DIR设置为/path/to/lib/,则会搜索静态FastNoise库的路径。
  3. 如果没有设置,则会回退到从源代码构建。

从源代码构建

要使用fastnoise2-sys从源代码构建FastNoise2,请确保您有

注意

  • 如果您不想从源代码构建,可以从FastNoise2 发布版下载预编译的二进制文件。
  • 通常不需要设置环境变量FASTNOISE2_SOURCE_DIR,因为fastnoise2-sys已将FastNoise2源代码作为Git子模块包含在内。如果您需要使用不同的源代码目录,请将FASTNOISE2_SOURCE_DIR设置为指向FastNoise2源代码的根目录。

无运行时依赖项

~0–2MB
~41K SLoC