Skip to content

Commit c8a64af

Browse files
committed
🎂 Some more fog fixes
1 parent 214391f commit c8a64af

File tree

5 files changed

+69
-32
lines changed

5 files changed

+69
-32
lines changed

‎src/main/java/com/james090500/renderer/shaders/GlobalShader.java‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@ public class GlobalShader {
1414
1515
// calculate fog: pos is view-space or world-space RELATIVE to camera
1616
vec4 calcFog(vec3 pos, vec4 color) {
17-
// cylindrical distance (ignore Y)
18-
float horizontalDist = length(vec2(pos.x, pos.z));
17+
// cylindrical distance
18+
float horizontalDist = length(pos);
1919
2020
// subtract start distance so fog only applies after fog.start
2121
float d = max(0.0, horizontalDist - fog.start);

‎src/main/java/com/james090500/renderer/shaders/Shader.java‎

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.james090500.renderer.shaders;
22

33
import com.james090500.BlockGame;
4+
import com.james090500.world.Fog;
45
import com.james090500.world.World;
56
import org.joml.Matrix4f;
67
import org.joml.Vector3f;
@@ -97,11 +98,11 @@ public void use() {
9798
}
9899

99100
public void useFog() {
100-
World.Fog fog = BlockGame.getInstance().getWorld().getFog();
101+
Fog fog = BlockGame.getInstance().getWorld().getFog();
101102

102-
setVec3("fog.color", fog.color());
103-
setFloat("fog.start", fog.start());
104-
setFloat("fog.density", fog.density());
103+
setVec3("fog.color", fog.getColor());
104+
setFloat("fog.start", fog.getStart());
105+
setFloat("fog.density", fog.getDensity());
105106
}
106107

107108
public void stop() {
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package com.james090500.world;
2+
3+
import com.james090500.BlockGame;
4+
import lombok.Getter;
5+
import org.joml.Vector3f;
6+
7+
@Getter
8+
public class Fog {
9+
10+
private final Vector3f color;
11+
private final float start;
12+
private final float density;
13+
14+
public Fog(Vector3f color, float start, float density) {
15+
this.color = color;
16+
this.start = getFogStart(start);
17+
this.density = density;
18+
}
19+
20+
private float getFogStart(float start) {
21+
int worldSize = BlockGame.getInstance().getConfig().getUserOptions().getRenderDistance().getValue();
22+
return ((worldSize - 2) * 16) * start;
23+
}
24+
}

‎src/main/java/com/james090500/world/World.java‎

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ public class World {
3131

3232
private final Object2ObjectMap<ChunkPos, Chunk> chunks = new Object2ObjectOpenHashMap<>();
3333

34-
public record ChunkPos(int x, int y) { }
34+
public record ChunkPos(int x, int y) {}
3535
public record ChunkOffset(int dx, int dz, int distSq) {}
3636

3737
public final Int2ObjectOpenHashMap<Entity> entities = new Int2ObjectOpenHashMap<>();
@@ -45,8 +45,7 @@ public record ChunkOffset(int dx, int dz, int distSq) {}
4545
private String worldName;
4646

4747
@Getter
48-
private Fog fog = new Fog(new Vector3f(0.529f, 0.808f, 0.922f), 10f, 0.05f);
49-
public record Fog(Vector3f color, float start, float density) {};
48+
private Fog fog;
5049

5150
@Getter @Setter
5251
private boolean remote = false;
@@ -285,6 +284,11 @@ public void update() {
285284
// No point looping if we aren't moving
286285
if(playerChunkX == player.getLastChunkX() && playerChunkZ == player.getLastChunkZ() && !this.forceUpdate) return;
287286

287+
// Update dynamic values
288+
if(this.forceUpdate) {
289+
this.fog = this.createFog();
290+
}
291+
288292
// Render chunks from players pos.
289293
Set<ChunkPos> requiredChunks = new HashSet<>();
290294
for (ChunkOffset offset : offsets) {
@@ -402,6 +406,14 @@ public Chunk loadChunk(int chunkX, int chunkZ) {
402406
}
403407
}
404408

409+
/**
410+
* Creates fog
411+
* @return The fog
412+
*/
413+
private Fog createFog() {
414+
return new Fog(new Vector3f(0.529f, 0.808f, 0.922f), 0.8f, 0.005f);
415+
}
416+
405417
/**
406418
* Exit the world
407419
*/
Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,34 @@
1-
fonts/Minecraftia-Regular.ttf
2-
gui/background.png
3-
gui/button.png
4-
gui/button_active.png
1+
terrain.png
52
gui/button_disabled.png
3+
gui/background.png
64
gui/logo.png
5+
gui/button_active.png
76
gui/pack.png
7+
gui/button.png
88
piehole_terrain.png
9-
sound/block/cloth1.ogg
10-
sound/block/cloth2.ogg
11-
sound/block/cloth3.ogg
9+
fonts/Minecraftia-Regular.ttf
10+
sound/gui/click.ogg
11+
sound/block/stone4.ogg
12+
sound/block/stone1.ogg
13+
sound/block/stone2.ogg
14+
sound/block/stone3.ogg
15+
sound/block/sand4.ogg
16+
sound/block/gravel3.ogg
17+
sound/block/gravel2.ogg
1218
sound/block/cloth4.ogg
1319
sound/block/grass1.ogg
14-
sound/block/grass2.ogg
1520
sound/block/grass3.ogg
16-
sound/block/grass4.ogg
1721
sound/block/gravel1.ogg
18-
sound/block/gravel2.ogg
19-
sound/block/gravel3.ogg
20-
sound/block/gravel4.ogg
21-
sound/block/sand1.ogg
22+
sound/block/grass2.ogg
2223
sound/block/sand2.ogg
24+
sound/block/cloth3.ogg
25+
sound/block/gravel4.ogg
26+
sound/block/cloth2.ogg
2327
sound/block/sand3.ogg
24-
sound/block/sand4.ogg
25-
sound/block/stone1.ogg
26-
sound/block/stone2.ogg
27-
sound/block/stone3.ogg
28-
sound/block/stone4.ogg
29-
sound/block/wood1.ogg
30-
sound/block/wood2.ogg
28+
sound/block/sand1.ogg
29+
sound/block/cloth1.ogg
30+
sound/block/grass4.ogg
3131
sound/block/wood3.ogg
32-
sound/block/wood4.ogg
33-
sound/gui/click.ogg
34-
terrain.png
32+
sound/block/wood2.ogg
33+
sound/block/wood1.ogg
34+
sound/block/wood4.ogg

0 commit comments

Comments
 (0)