From 4508c8d7f6dc5d28f3a4e153d20138c66f0cd03a Mon Sep 17 00:00:00 2001 From: Yggdrasil75 Date: Fri, 21 Nov 2025 14:50:56 -0500 Subject: [PATCH] trying to fix noise. --- tests/g2chromatic2.cpp | 5 +++-- util/grid/grid2.hpp | 14 +++++++++----- util/noise/pnoise2.hpp | 15 +++++++++------ util/output/frame.hpp | 39 +++++++++++++++++++++++++++++++++++++++ 4 files changed, 60 insertions(+), 13 deletions(-) diff --git a/tests/g2chromatic2.cpp b/tests/g2chromatic2.cpp index 34a2898..825ad60 100644 --- a/tests/g2chromatic2.cpp +++ b/tests/g2chromatic2.cpp @@ -76,6 +76,7 @@ void Preview(Grid2& grid) { //std::vector rgbData; frame rgbData = grid.getGridAsFrame(frame::colormap::RGB); + std::cout << "Frame looks like: " << rgbData << std::endl; bool success = BMPWriter::saveBMP("output/grayscalesource.bmp", rgbData); if (!success) { std::cout << "yo! this failed in Preview" << std::endl; @@ -261,13 +262,13 @@ void mainLogic(const AnimationConfig& config, Shared& state, int gradnoise) { // Print compression info for this frame if (i % 10 == 0 ) { frame bgrframe; - std::cout << "Processing frame " << i + 1 << "/" << config.totalFrames << std::endl; + //std::cout << "Processing frame " << i + 1 << "/" << config.totalFrames << std::endl; bgrframe = grid.getGridAsFrame(frame::colormap::BGR); frames.push_back(bgrframe); //bgrframe.decompress(); //BMPWriter::saveBMP(std::format("output/grayscalesource.{}.bmp", i), bgrframe); bgrframe.compressFrameLZ78(); - bgrframe.printCompressionStats(); + //bgrframe.printCompressionStats(); } } exportavi(frames,config); diff --git a/util/grid/grid2.hpp b/util/grid/grid2.hpp index b3bf6c5..7a66717 100644 --- a/util/grid/grid2.hpp +++ b/util/grid/grid2.hpp @@ -225,6 +225,9 @@ public: Grid2 noiseGenGrid(size_t minx,size_t miny, size_t maxx, size_t maxy , float minChance = 0.1f, float maxChance = 1.0f, bool color = true) { + std::cout << "generating a noise grid with the following: (" << minx << ", " << miny + << ") by (" << maxx << ", " << maxy << ") " << "chance: " << minChance + << " max: " << maxChance << " gen colors: " << color << std::endl; std::vector poses; std::vector colors; std::vector sizes; @@ -233,6 +236,7 @@ public: Vec2 pos = Vec2(x,y); float alpha = noisegen.permute(Vec2(x,y)); if (alpha > minChance && alpha < maxChance) { + std::cout << "generating at: " << pos.x << ", " << pos.y << ")" << std::endl; if (color) { float red = noisegen.permute(pos); float green = noisegen.permute(pos); @@ -585,7 +589,7 @@ public: // no return because it passes back a 1d vector of ints between 0 and 255 with a width and height //get region as rgb void getGridRegionAsRGB(const Vec2& minCorner, const Vec2& maxCorner, - int& width, int& height, std::vector& rgbData) const { + int& width, int& height, std::vector& rgbData) const { TIME_FUNCTION; // Calculate dimensions width = static_cast(maxCorner.x - minCorner.x); @@ -605,13 +609,13 @@ public: // for (int y = minCorner.y; x < maxCorner.y; y++){ // Vec2 pos = Vec2(x,y); // size_t posID = getPositionVec(pos, 1.0f, false); - + // } // } // For each position in the grid, find the corresponding pixel for (const auto& [id, pos] : Positions) { size_t size = Sizes.at(id); - + // Calculate pixel coordinates int pixelXm = static_cast(pos.x - size/2 - minCorner.x); int pixelXM = static_cast(pos.x + size/2 - minCorner.x); @@ -622,7 +626,7 @@ public: pixelXM = std::min(width - 1, pixelXM); pixelYm = std::max(0, pixelYm); pixelYM = std::min(height - 1, pixelYM); - + // Ensure within bounds if (pixelXM >= minCorner.x && pixelXm < width && pixelYM >= minCorner.y && pixelYm < height) { const Vec4& color = Colors.at(id); @@ -632,7 +636,7 @@ public: for (int px = pixelXm; px <= pixelXM; ++px){ int index = (py * width + px); Vec4 dest = rgbaBuffer[index]; - + // Alpha blending: new_color = src * src_alpha + dest * (1 - src_alpha) dest.r = color.r * srcAlpha + dest.r * invSrcAlpha; dest.g = color.g * srcAlpha + dest.g * invSrcAlpha; diff --git a/util/noise/pnoise2.hpp b/util/noise/pnoise2.hpp index 5c2db9b..949997d 100644 --- a/util/noise/pnoise2.hpp +++ b/util/noise/pnoise2.hpp @@ -14,13 +14,16 @@ private: std::default_random_engine rng; float TR,TL,BR,BL; public: - PNoise2() { - permutation.reserve(256); - for (int i = 0; i < 256; i++){ - permutation[i] = i; + PNoise2() : rng(std::random_device{}()){ + //permutation.reserve(256); + std::vector permutationt; + for (int i = 0; i < 255; i++){ + //permutation[i] = i; + permutationt.push_back(i); } - std::ranges::shuffle(permutation, rng); - permutation.insert(permutation.end(),permutation.begin(),permutation.end()); + std::ranges::shuffle(permutationt, rng); + permutation.insert(permutation.end(),permutationt.begin(),permutationt.end()); + permutation.insert(permutation.end(),permutationt.begin(),permutationt.end()); } float permute(Vec2 point) { diff --git a/util/output/frame.hpp b/util/output/frame.hpp index 632ebd8..5d16b65 100644 --- a/util/output/frame.hpp +++ b/util/output/frame.hpp @@ -504,4 +504,43 @@ private: }; + +std::ostream& operator<<(std::ostream& os, frame& f) { + os << "Frame[" << f.getWidth() << "x" << f.getHeight() << "] "; + + // Color format + os << "Format: "; + switch (f.colorFormat) { + case frame::colormap::RGB: os << "RGB"; break; + case frame::colormap::RGBA: os << "RGBA"; break; + case frame::colormap::BGR: os << "BGR"; break; + case frame::colormap::BGRA: os << "BGRA"; break; + case frame::colormap::B: os << "Grayscale"; break; + default: os << "Unknown"; break; + } + + // Compression info + os << " | Compression: " << f.getCompressionTypeString(); + + // Size info + if (f.isCompressed()) { + os << " | " << f.getSourceSize() << "B -> " << f.getTotalCompressedSize() + << "B (ratio: " << std::fixed << std::setprecision(2) << f.getCompressionRatio() << ":1)"; + } else { + os << " | Size: " << f.getData().size() << "B"; + } + + // Data status + os << " | Data: "; + if (!f.getData().empty()) { + os << "raw(" << f.getData().size() << " bytes)"; + } else if (f.getCompressedDataSize() > 0) { + os << "compressed(" << f.getCompressedDataSize() << " words)"; + } else { + os << "empty"; + } + + return os; +} + #endif \ No newline at end of file