From ab1f83b7164c5ad18e1437e9d78e2c77214971bb Mon Sep 17 00:00:00 2001 From: Brett Laptop Date: Sat, 5 Apr 2025 17:26:22 -0400 Subject: [PATCH] playing with noise --- .idea/vcs.xml | 3 +++ CMakeLists.txt | 2 +- lib/blt-gp | 2 +- src/gp_system.cpp | 16 +++++++++++++++- 4 files changed, 20 insertions(+), 3 deletions(-) diff --git a/.idea/vcs.xml b/.idea/vcs.xml index 1903173..f99ccee 100644 --- a/.idea/vcs.xml +++ b/.idea/vcs.xml @@ -11,6 +11,9 @@ + + + diff --git a/CMakeLists.txt b/CMakeLists.txt index bdd1ccb..6c954bf 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 3.25) -project(image-gp-2 VERSION 0.0.9) +project(image-gp-2 VERSION 0.0.10) option(ENABLE_ADDRSAN "Enable the address sanitizer" OFF) option(ENABLE_UBSAN "Enable the ub sanitizer" OFF) diff --git a/lib/blt-gp b/lib/blt-gp index 0dc083e..2e09696 160000 --- a/lib/blt-gp +++ b/lib/blt-gp @@ -1 +1 @@ -Subproject commit 0dc083e095393beaf88d58f07b6f06c04439cdb8 +Subproject commit 2e09696a673eeae099bc87024e6f32e6c5815fa3 diff --git a/src/gp_system.cpp b/src/gp_system.cpp index 65fcdb7..386748b 100644 --- a/src/gp_system.cpp +++ b/src/gp_system.cpp @@ -83,6 +83,12 @@ void setup_operations(gp_program* program) } return ret; }); + static auto op_image_noise = operation_t([program]() { + image_t ret{}; + for (auto& v : ret.get_data().data) + v = program->get_random().get_float(0, 1.0f); + return ret; + }).set_ephemeral(); static auto op_image_ephemeral = operation_t([program]() { image_t ret{}; const auto value = program->get_random().get_float(); @@ -175,6 +181,14 @@ void setup_operations(gp_program* program) lacunarity + 2, gain + 0.5f, 1.0f, static_cast(octaves)); return ret; }, "perlin_image"); + static operation_t op_image_perlin_bounded([](float octaves) { + octaves = std::min(std::max(octaves, 4.0f), 8.0f); + image_t ret{}; + for (const auto& [i, out] : blt::enumerate(ret.get_data().data)) + out = stb_perlin_fbm_noise3(static_cast(i % IMAGE_DIMENSIONS) + 0.23423f, static_cast(i / IMAGE_DIMENSIONS) + 0.6234f, 0.4861f, + 2, 0.5, static_cast(octaves)); + return ret; + }, "perlin_image_bounded"); static operation_t op_sin([](const float a) { return std::sin(a); }, "sin_float"); @@ -198,7 +212,7 @@ void setup_operations(gp_program* program) operator_builder builder{}; builder.build(op_image_ephemeral, make_add(), make_sub(), make_mul(), make_div(), op_image_x, op_image_y, op_image_sin, op_image_gt, op_image_lt, op_image_cos, op_image_log, op_image_exp, op_image_or, op_image_and, op_image_xor, - op_image_not, op_image_perlin, make_add(), make_sub(), make_mul(), make_prot_div(), op_sin, op_cos, + op_image_not, op_image_perlin_bounded, op_image_blend, make_add(), make_sub(), make_mul(), make_prot_div(), op_sin, op_cos, op_exp, op_log, lit); program->set_operations(builder.grab()); }