Minimap und ingame Karte - umsetzung begonnen
This commit is contained in:
BIN
blight-assets/src/main/resources/Characters/Models/bjoernson.j3o
Normal file
BIN
blight-assets/src/main/resources/Characters/Models/bjoernson.j3o
Normal file
Binary file not shown.
24
blight-assets/src/main/resources/MatDefs/FogOfWar.j3md
Normal file
24
blight-assets/src/main/resources/MatDefs/FogOfWar.j3md
Normal file
@@ -0,0 +1,24 @@
|
||||
MaterialDef FogOfWar {
|
||||
|
||||
MaterialParameters {
|
||||
Texture2D ExploreMap // Alpha=0 erkundet, Alpha=1 Nebel
|
||||
Float Time : 0.0 // Sekunden seit Spielstart (für Animation)
|
||||
Vector2 OverlayOrigin // Overlay-Position in Bildschirm-Pixeln (bottom-left)
|
||||
Vector2 OverlaySize // Overlay-Größe in Pixeln
|
||||
Float FadePx : 5.0 // Breite des Weich-Übergangs
|
||||
}
|
||||
|
||||
Technique {
|
||||
VertexShader GLSL150: Shaders/FogOfWar.vert
|
||||
FragmentShader GLSL150: Shaders/FogOfWar.frag
|
||||
|
||||
WorldParameters {
|
||||
WorldViewProjectionMatrix
|
||||
}
|
||||
|
||||
RenderState {
|
||||
Blend Alpha
|
||||
DepthWrite Off
|
||||
}
|
||||
}
|
||||
}
|
||||
23
blight-assets/src/main/resources/MatDefs/MapOverlay.j3md
Normal file
23
blight-assets/src/main/resources/MatDefs/MapOverlay.j3md
Normal file
@@ -0,0 +1,23 @@
|
||||
MaterialDef MapOverlay {
|
||||
|
||||
MaterialParameters {
|
||||
Texture2D ColorMap
|
||||
Vector2 OverlayOrigin // Overlay-Position in Bildschirm-Pixeln (bottom-left)
|
||||
Vector2 OverlaySize // Overlay-Größe in Pixeln
|
||||
Float FadePx : 5.0 // Breite des Weich-Übergangs in Pixeln
|
||||
}
|
||||
|
||||
Technique {
|
||||
VertexShader GLSL150: Shaders/FogOfWar.vert
|
||||
FragmentShader GLSL150: Shaders/MapOverlay.frag
|
||||
|
||||
WorldParameters {
|
||||
WorldViewProjectionMatrix
|
||||
}
|
||||
|
||||
RenderState {
|
||||
Blend Alpha
|
||||
DepthWrite Off
|
||||
}
|
||||
}
|
||||
}
|
||||
98
blight-assets/src/main/resources/Shaders/FogOfWar.frag
Normal file
98
blight-assets/src/main/resources/Shaders/FogOfWar.frag
Normal file
@@ -0,0 +1,98 @@
|
||||
uniform sampler2D m_ExploreMap;
|
||||
uniform float m_Time;
|
||||
uniform vec2 m_OverlayOrigin;
|
||||
uniform vec2 m_OverlaySize;
|
||||
uniform float m_FadePx;
|
||||
|
||||
in vec2 texCoord;
|
||||
out vec4 outFragColor;
|
||||
|
||||
// ── Procedural Value Noise ────────────────────────────────────────────────────
|
||||
|
||||
float hash(vec2 p) {
|
||||
vec3 p3 = fract(vec3(p.xyx) * vec3(0.1031, 0.1030, 0.0973));
|
||||
p3 += dot(p3, p3.yzx + 33.33);
|
||||
return fract((p3.x + p3.y) * p3.z);
|
||||
}
|
||||
|
||||
float vnoise(vec2 p) {
|
||||
vec2 i = floor(p);
|
||||
vec2 f = fract(p);
|
||||
f = f * f * (3.0 - 2.0 * f);
|
||||
return mix(
|
||||
mix(hash(i), hash(i + vec2(1.0, 0.0)), f.x),
|
||||
mix(hash(i + vec2(0.0,1.0)), hash(i + vec2(1.0, 1.0)), f.x),
|
||||
f.y);
|
||||
}
|
||||
|
||||
// FBM: 3 Oktaven
|
||||
float fbm(vec2 p) {
|
||||
float v = 0.0;
|
||||
v += vnoise(p) * 0.500;
|
||||
v += vnoise(p * 2.1 + vec2(1.7, 9.2)) * 0.250;
|
||||
v += vnoise(p * 4.3 + vec2(8.3, 2.8)) * 0.125;
|
||||
return v / 0.875;
|
||||
}
|
||||
|
||||
// ── Hauptprogramm ─────────────────────────────────────────────────────────────
|
||||
|
||||
void main() {
|
||||
|
||||
// Weichgezeichnete Erkundungsmaske (3×3-Kernel, 8-Texel-Radius = ~32 m)
|
||||
float ts = 8.0 / 512.0;
|
||||
float density =
|
||||
texture(m_ExploreMap, texCoord + vec2(-ts,-ts)).a +
|
||||
texture(m_ExploreMap, texCoord + vec2(0.0,-ts)).a +
|
||||
texture(m_ExploreMap, texCoord + vec2( ts,-ts)).a +
|
||||
texture(m_ExploreMap, texCoord + vec2(-ts, 0.0)).a +
|
||||
texture(m_ExploreMap, texCoord ).a +
|
||||
texture(m_ExploreMap, texCoord + vec2( ts, 0.0)).a +
|
||||
texture(m_ExploreMap, texCoord + vec2(-ts, ts)).a +
|
||||
texture(m_ExploreMap, texCoord + vec2(0.0, ts)).a +
|
||||
texture(m_ExploreMap, texCoord + vec2( ts, ts)).a;
|
||||
density /= 9.0;
|
||||
|
||||
// Vollständig erkundet → diesen Fragment überspringen
|
||||
if (density <= 0.0) { discard; }
|
||||
|
||||
// ── Animierter Nebel mit Domain-Warping ───────────────────────────────────
|
||||
|
||||
float t = m_Time * 0.18;
|
||||
vec2 uv = texCoord;
|
||||
|
||||
// Erste Warp-Schicht: langsam driftende Wirbel
|
||||
vec2 q = vec2(
|
||||
fbm(uv * 2.5 + vec2(t * 0.40, t * 0.15)),
|
||||
fbm(uv * 2.5 + vec2(t * 0.15, t * 0.30) + vec2(5.2, 1.3))
|
||||
);
|
||||
|
||||
// Zweite Warp-Schicht: gibt Tiefe und Komplexität
|
||||
vec2 r = vec2(
|
||||
fbm(uv * 2.0 + q * 0.9 + vec2(1.7, 9.2) + vec2(t * 0.10, 0.0)),
|
||||
fbm(uv * 2.0 + q * 0.9 + vec2(8.3, 2.8) + vec2(0.0, t * 0.08))
|
||||
);
|
||||
|
||||
// Finaler Noise-Wert [0..1]
|
||||
float f = fbm(uv * 3.0 + r * 1.2 + vec2(t * 0.05, t * 0.04));
|
||||
|
||||
// ── Farbe + Alpha ─────────────────────────────────────────────────────────
|
||||
|
||||
// Dunkles Blaugrau – etwas heller an den "Schwaden"
|
||||
vec3 fogColor = mix(
|
||||
vec3(0.04, 0.05, 0.09), // tiefer Schatten
|
||||
vec3(0.11, 0.13, 0.20), // heller Dunst
|
||||
f
|
||||
);
|
||||
|
||||
// Weich-Übergang am Overlay-Rand (Screen-Space, zoom-unabhängig)
|
||||
float distL = gl_FragCoord.x - m_OverlayOrigin.x;
|
||||
float distR = (m_OverlayOrigin.x + m_OverlaySize.x) - gl_FragCoord.x;
|
||||
float distB = gl_FragCoord.y - m_OverlayOrigin.y;
|
||||
float distT = (m_OverlayOrigin.y + m_OverlaySize.y) - gl_FragCoord.y;
|
||||
float edgeFade = clamp(min(min(distL, distR), min(distB, distT)) / m_FadePx, 0.0, 1.0);
|
||||
|
||||
// Alpha: voll opak im unentdeckten Innern, weicher Rand durch Kernel + Edge-Fade
|
||||
float alpha = density * (0.88 + f * 0.12) * edgeFade;
|
||||
|
||||
outFragColor = vec4(fogColor, alpha);
|
||||
}
|
||||
11
blight-assets/src/main/resources/Shaders/FogOfWar.vert
Normal file
11
blight-assets/src/main/resources/Shaders/FogOfWar.vert
Normal file
@@ -0,0 +1,11 @@
|
||||
uniform mat4 g_WorldViewProjectionMatrix;
|
||||
|
||||
in vec3 inPosition;
|
||||
in vec2 inTexCoord;
|
||||
|
||||
out vec2 texCoord;
|
||||
|
||||
void main() {
|
||||
texCoord = inTexCoord;
|
||||
gl_Position = g_WorldViewProjectionMatrix * vec4(inPosition, 1.0);
|
||||
}
|
||||
20
blight-assets/src/main/resources/Shaders/MapOverlay.frag
Normal file
20
blight-assets/src/main/resources/Shaders/MapOverlay.frag
Normal file
@@ -0,0 +1,20 @@
|
||||
uniform sampler2D m_ColorMap;
|
||||
uniform vec2 m_OverlayOrigin;
|
||||
uniform vec2 m_OverlaySize;
|
||||
uniform float m_FadePx;
|
||||
|
||||
in vec2 texCoord;
|
||||
out vec4 outFragColor;
|
||||
|
||||
void main() {
|
||||
vec4 col = texture(m_ColorMap, texCoord);
|
||||
|
||||
// Abstand des Fragments vom nächsten Overlay-Rand in Screen-Pixeln
|
||||
float distL = gl_FragCoord.x - m_OverlayOrigin.x;
|
||||
float distR = (m_OverlayOrigin.x + m_OverlaySize.x) - gl_FragCoord.x;
|
||||
float distB = gl_FragCoord.y - m_OverlayOrigin.y;
|
||||
float distT = (m_OverlayOrigin.y + m_OverlaySize.y) - gl_FragCoord.y;
|
||||
float edgeFade = clamp(min(min(distL, distR), min(distB, distT)) / m_FadePx, 0.0, 1.0);
|
||||
|
||||
outFragColor = vec4(col.rgb, col.a * edgeFade);
|
||||
}
|
||||
BIN
blight-assets/src/main/resources/Textures/hud/minimap_world.png
Normal file
BIN
blight-assets/src/main/resources/Textures/hud/minimap_world.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 56 KiB |
Reference in New Issue
Block a user