From d36eb85dba3fa1f4c36a286e0c9fd05585d26e30 Mon Sep 17 00:00:00 2001 From: MihailRis Date: Mon, 13 Jan 2025 19:02:08 +0300 Subject: [PATCH] snow test --- res/textures/misc/snow.png | Bin 28032 -> 716 bytes src/graphics/render/PrecipitationRenderer.cpp | 41 +++++++++++------- src/maths/util.hpp | 2 + 3 files changed, 28 insertions(+), 15 deletions(-) diff --git a/res/textures/misc/snow.png b/res/textures/misc/snow.png index 810806ff7883d2b8bd96712eb08ea7faccef9492..a687e84151979ee002104ef505420468b410f90b 100644 GIT binary patch literal 716 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H1|$#LC7xzrV4Cdd;uumf=k48xUbh2e+CI*m zu`Q!8r|03{_}g~9hGuG^w~qaJF8J3dW=-y`XLFwajBRMy$G@agCD)!~t?hTl7khXZ z&M`bd5chZGSuKk$F zctDaN#*|U!vrXh?Ev6gm9vA+Z((~Z&DvpG09xLA~&r-AeXB{f&@a)I$m1+!ck0V=# zu$JdRWXWoew?gICHyP#$9zTyH199KFUkrJV?bcmZ{UlW{ewF>fkHf3@9S*~lxo!G+ z@%W$Y%JZsH2RyuF?2Q>Lm>WO@L-f(@1`I3i|NS1ZY<3Dm!2DUWmxsTSa8OkG<&k;E z`|KY(Rc4JNHy-c5q1o_a+r(Ru6V0tma+Wj5?2ntrgcL4tn_yyjn;32W+&Xgf`Og0> zR+~<;J@~QQ@Fqiv6f~&JB@WDA*WI7{diusLUZCXH&mxF0gs|E<7l4ANGXAmr3<~$1m^dHMhH8P51^?WpD*0{0oaXKPC7PD`7yRHAe z&+F>VFYfN@U+p?`KetKB7lteu`_+Yi&IB{e0mTmy#GNNh5|0zv-{u7|u6b;imN`c~ zZp&;>)(sxhUz*j~xfZ-jUN|F!;b!TtM?cg}b~2Pif!*+*SHUcH$We;WT(4ggargQu&X%Q~loCIFUQDPsTt literal 28032 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 z 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 diff --git a/src/graphics/render/PrecipitationRenderer.cpp b/src/graphics/render/PrecipitationRenderer.cpp index b8369ae2..25762f01 100644 --- a/src/graphics/render/PrecipitationRenderer.cpp +++ b/src/graphics/render/PrecipitationRenderer.cpp @@ -4,6 +4,7 @@ #include "assets/assets_util.hpp" #include "graphics/core/Shader.hpp" #include "graphics/core/Texture.hpp" +#include "maths/util.hpp" #include "window/Camera.hpp" #include "world/Level.hpp" #include "voxels/Chunks.hpp" @@ -41,30 +42,34 @@ int PrecipitationRenderer::getHeightAt(int x, int z) { void PrecipitationRenderer::render(const Camera& camera, float delta) { - timer += delta * 1.6f; + timer += delta * 0.5f; batch->begin(); + util::PseudoRandom random(0); + int x = glm::floor(camera.position.x); int y = glm::floor(camera.position.y); int z = glm::floor(camera.position.z); - auto& texture = assets.require("misc/rain"); + auto& texture = assets.require("misc/snow"); texture.setMipMapping(false); batch->setTexture(&texture, {}); const auto& front = camera.front; glm::vec2 size {1, 40}; - glm::vec4 light(1, 1, 1, 0); + glm::vec4 light(0, 0, 0, 1); - float horizontal = 0.0f; + float horizontal = 0.5f; - int radius = 5; - int depth = 8; - float scale = 0.1f; + int radius = 6; + int depth = 12; + float scale = 0.4f; int quads = 0; float k = 21.41149; for (int lx = -radius; lx <= radius; lx++) { for (int lz = -depth; lz < 0; lz++) { + random.setSeed(lx + x, lz + z); + float hspeed = (random.randFloat() * 2.0f - 1.0f) * horizontal; glm::vec3 pos { x + lx + 0.5f, glm::max(y - 20, getHeightAt(x + lx, z + lz)) + 21, @@ -77,9 +82,9 @@ void PrecipitationRenderer::render(const Camera& camera, float delta) { light, glm::vec3(1.0f), UVRegion( - (lx + x) * scale + timer * horizontal, + (lx + x) * scale + timer * hspeed, timer + y * scale + (z + lz) * k, - (lx + x + 1) * scale + timer * horizontal, + (lx + x + 1) * scale + timer * hspeed, timer + (40 + y) * scale + (z + lz) * k ) ); @@ -87,6 +92,8 @@ void PrecipitationRenderer::render(const Camera& camera, float delta) { } for (int lx = -radius; lx <= radius; lx++) { for (int lz = depth; lz > 0; lz--) { + random.setSeed(lx + x, lz + z); + float hspeed = (random.randFloat() * 2.0f - 1.0f) * horizontal; glm::vec3 pos { x + lx + 0.5f, glm::max(y - 20, getHeightAt(x + lx, z + lz)) + 21, @@ -99,9 +106,9 @@ void PrecipitationRenderer::render(const Camera& camera, float delta) { light, glm::vec3(1.0f), UVRegion( - (lx + x) * scale + timer * horizontal, + (lx + x) * scale + timer * hspeed, timer + y * scale + (z + lz) * k, - (lx + x + 1) * scale + timer * horizontal, + (lx + x + 1) * scale + timer * hspeed, timer + (40 + y) * scale + (z + lz) * k ) ); @@ -109,6 +116,8 @@ void PrecipitationRenderer::render(const Camera& camera, float delta) { } for (int lz = -radius; lz <= radius; lz++) { for (int lx = -depth; lx < 0; lx++) { + random.setSeed(lx + x, lz + z); + float hspeed = (random.randFloat() * 2.0f - 1.0f) * horizontal; glm::vec3 pos { x + lx + 0.5f, glm::max(y - 20, getHeightAt(x + lx, z + lz)) + 21, @@ -121,9 +130,9 @@ void PrecipitationRenderer::render(const Camera& camera, float delta) { light, glm::vec3(1.0f), UVRegion( - (lz + z) * scale + timer * horizontal, + (lz + z) * scale + timer * hspeed, timer + y * scale + (x + lx) * k, - (lz + z + 1) * scale + timer * horizontal, + (lz + z + 1) * scale + timer * hspeed, timer + (40 + y) * scale + (x + lx) * k ) ); @@ -131,6 +140,8 @@ void PrecipitationRenderer::render(const Camera& camera, float delta) { } for (int lz = -radius; lz <= radius; lz++) { for (int lx = depth; lx > 0; lx--) { + random.setSeed(lx + x, lz + z); + float hspeed = (random.randFloat() * 2.0f - 1.0f) * horizontal; glm::vec3 pos { x + lx + 0.5f, glm::max(y - 20, getHeightAt(x + lx, z + lz)) + 21, @@ -143,9 +154,9 @@ void PrecipitationRenderer::render(const Camera& camera, float delta) { light, glm::vec3(1.0f), UVRegion( - (lz + z) * scale + timer * horizontal, + (lz + z) * scale + timer * hspeed, timer + y * scale + (x + lx) * k, - (lz + z + 1) * scale + timer * horizontal, + (lz + z + 1) * scale + timer * hspeed, timer + (40 + y) * scale + (x + lx) * k ) ); diff --git a/src/maths/util.hpp b/src/maths/util.hpp index df39cf41..f417384d 100644 --- a/src/maths/util.hpp +++ b/src/maths/util.hpp @@ -20,6 +20,8 @@ namespace util { class PseudoRandom { unsigned short seed; public: + PseudoRandom(unsigned short seed) : seed(seed) {} + PseudoRandom() { seed = static_cast(time(0)); }