Files
minecraft-clone/js/noise.js
T
minecraft-cloneandClaude 1049253d54 feat: Minecraft Clone MVP – prozedurale Welt, Blöcke, Abbauen/Setzen
- Weltgenerierung: FBM-Terrain, 3 Biome (Plains/Wald/Wüste), Höhlen, Wasser, Bäume
- Blöcke: Grass, Dirt, Stein, Sand, Holz, Blätter, Wasser (+Bedrock)
- Interaktion: DDA-Voxel-Raycast, Abbauen (LMB) & Setzen (RMB), Hotbar 1-6
- Spieler: First-Person, Gravitation, AABB-Kollision, Springen, Fly-Mode (F)
- Engine: Chunk-Streaming (16x16x64), Face-Culling, opaker+transparenter Pass
- Stack: Three.js + simplex-noise via CDN, prozedurale Texturen, kein Build-Step

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-20 23:55:12 +02:00

31 lines
1.2 KiB
JavaScript

// Noise-Setup: verschiedene Noise-Funktionen fuer Terrain, Biome und Hoehlen
import { createNoise2D, createNoise3D } from 'simplex-noise';
import { WORLD_SEED } from './constants.js';
import { mulberry32 } from './rng.js';
// Wir leiten mehrere unabhaengige Streams aus dem Seed ab, damit
// verschiedene Noise-Quellen (Hoehe, Temperatur, Hoehlen) nicht korrelieren.
const rngTerrain = mulberry32(WORLD_SEED);
const rngTemp = mulberry32(WORLD_SEED ^ 0x9e3779b9);
const rngHumid = mulberry32(WORLD_SEED ^ 0x85ebca6b);
const rngCave = mulberry32(WORLD_SEED ^ 0xc2b2ae35);
const rngDetail = mulberry32(WORLD_SEED ^ 0x27d4eb2f);
export const noise2DTerrain = createNoise2D(rngTerrain);
export const noise2DDetail = createNoise2D(rngDetail);
export const noise2DTemp = createNoise2D(rngTemp);
export const noise2DHumid = createNoise2D(rngHumid);
export const noise3DCave = createNoise3D(rngCave);
// Fraktale Brownian Motion (fbm) in 2D
export function fbm2(noiseFn, x, z, octaves, lacunarity, gain) {
let amp = 1, freq = 1, sum = 0, norm = 0;
for (let o = 0; o < octaves; o++) {
sum += amp * noiseFn(x * freq, z * freq);
norm += amp;
amp *= gain;
freq *= lacunarity;
}
return sum / norm; // [-1,1]
}