From 73045aec4d3b60284c7adae8abb8ec41c1c4b742 Mon Sep 17 00:00:00 2001 From: DIvan2000 Date: Mon, 10 Aug 2026 04:54:03 +0400 Subject: [PATCH] =?UTF-8?q?=D0=A4=D0=B8=D0=BA=D1=81=20farlands?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../client/render/PostProcessingManager.java | 5 ++++- .../assets/veila/shaders/fog_raymarching.frag | 16 ++++++---------- 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/src/client/java/su/divan2000/veila/client/render/PostProcessingManager.java b/src/client/java/su/divan2000/veila/client/render/PostProcessingManager.java index 62137a1..6acf930 100644 --- a/src/client/java/su/divan2000/veila/client/render/PostProcessingManager.java +++ b/src/client/java/su/divan2000/veila/client/render/PostProcessingManager.java @@ -315,7 +315,10 @@ public class PostProcessingManager { // Камера Camera camera = client.gameRenderer.getCamera(); Vec3d pos = camera.getPos(); - GL20.glUniform3f(rm_cameraPositionLocation, (float) pos.x, (float) pos.y, (float) pos.z); + float localCameraX = (float) (pos.x - FogSystem.originChunkX() * FogWorldVolume.CHUNK_SIZE); + float localCameraY = (float) (pos.y - FogWorldVolume.MIN_Y); + float localCameraZ = (float) (pos.z - FogSystem.originChunkZ() * FogWorldVolume.CHUNK_SIZE); + GL20.glUniform3f(rm_cameraPositionLocation, localCameraX, localCameraY, localCameraZ); // Размер экрана (scaled) GL20.glUniform2f(rm_screenSizeLocation, scaledWidth, scaledHeight); diff --git a/src/client/resources/assets/veila/shaders/fog_raymarching.frag b/src/client/resources/assets/veila/shaders/fog_raymarching.frag index 8acf6e4..713289f 100644 --- a/src/client/resources/assets/veila/shaders/fog_raymarching.frag +++ b/src/client/resources/assets/veila/shaders/fog_raymarching.frag @@ -72,25 +72,21 @@ vec3 reconstructWorldPosition(vec2 uv) vec3 worldToUV(vec3 worldPos) { - float localX = worldPos.x - float(FogOrigin.x); - float localZ = worldPos.z - float(FogOrigin.y); - if ( - localX < 0.0 || localX >= FOG_SIZE_X || - localZ < 0.0 || localZ >= FOG_SIZE_Z || - worldPos.y < WORLD_BOTTOM || - worldPos.y >= WORLD_BOTTOM + WORLD_HEIGHT + worldPos.x < 0.0 || worldPos.x >= FOG_SIZE_X || + worldPos.z < 0.0 || worldPos.z >= FOG_SIZE_Z || + worldPos.y < 0.0 || worldPos.y >= WORLD_HEIGHT ){ return vec3(-1.0); } - float physicalX = localX + float(RingBlockOffset.x); - float physicalZ = localZ + float(RingBlockOffset.y); + float physicalX = mod(worldPos.x + float(RingBlockOffset.x), FOG_SIZE_X); + float physicalZ = mod(worldPos.z + float(RingBlockOffset.y), FOG_SIZE_Z); vec3 uv; uv.x = physicalX / FOG_SIZE_X; uv.z = physicalZ / FOG_SIZE_Z; - uv.y = (worldPos.y - WORLD_BOTTOM) / WORLD_HEIGHT; + uv.y = worldPos.y / WORLD_HEIGHT; return uv; }