79 lines
2.9 KiB
Markdown
79 lines
2.9 KiB
Markdown
# Minecraft Clone
|
||
|
||
Ein browserbasierter Voxel-Sandbox-Clone mit **Three.js** und prozeduraler Weltgenerierung.
|
||
Ohne Build-Step – läuft direkt im Browser über CDN-Module.
|
||
|
||
🎮 **Live-Demo:** <https://nockal.com/minecraft-clone>
|
||
|
||

|
||
|
||
## Starten
|
||
|
||
Einfach `index.html` über einen lokalen Webserver öffnen (ES-Module brauchen `http://`, kein `file://`):
|
||
|
||
```bash
|
||
cd minecraft-clone
|
||
python3 -m http.server 8080
|
||
# Browser: http://localhost:8080
|
||
```
|
||
|
||
> Das Projekt liegt unter `…/stacks/web/html/minecraft-clone` und wird i. d. R. schon
|
||
> vom Web-Stack ausgeliefert.
|
||
|
||
## Features
|
||
|
||
- **Weltgenerierung**
|
||
- FBM-Terrain (fraktaler Noise)
|
||
- **Biome**: Plains, Wald, Wüste (über Temperatur-/Feuchtigkeit-Noise)
|
||
- **Höhlen** über 3D-Noise
|
||
- **Wasser** auf Meereshöhe
|
||
- **Bäume** (Stamm + Blattkrone), chunk-übergreifend
|
||
- **Blöcke**: Grass, Dirt, Stein, Sand, Holz, Blätter, Wasser, Bedrock
|
||
- **Abbauen** (Linke Maustaste) und **Setzen** (Rechte Maustaste) per DDA-Voxel-Raycast
|
||
- **Streaming**: Chunks werden um den Spieler dynamisch geladen/entfernt
|
||
- First-Person-Steuerung mit Gravitation, Kollision, Springen, **Fly-Modus** & Schwimmen
|
||
- **Grafik**: dynamische Schatten (PCF Soft), baked Vertex-Ambient-Occlusion
|
||
(Smooth Lighting) und Post-Processing (Bloom + ACES Tone-Mapping / sRGB)
|
||
|
||
## Anpassen
|
||
|
||
Alle Einstellungen – Render-Distanz, Grafik-Effects (Schatten/Bloom/AO), Beleuchtung,
|
||
Spieler-Physik, Welt-Seed, Meereshöhe, Maus-Sensitivität u. a. – liegen zentral in
|
||
[`js/config.js`](js/config.js). Werte ändern, Seite neu laden, fertig.
|
||
|
||
## Steuerung
|
||
|
||
| Taste | Aktion |
|
||
|---|---|
|
||
| `WASD` | Laufen |
|
||
| `Maus` | Umsehen |
|
||
| `Leertaste` | Springen / im Wasser aufsteigen |
|
||
| `Shift` | Sprinten / im Flug nach unten |
|
||
| `Linke Maustaste` | Block abbauen |
|
||
| `Rechte Maustaste` | Block setzen |
|
||
| `1`–`6` | Block in der Hotbar wählen |
|
||
| `F` | Flug-Modus ein/aus |
|
||
| `Esc` | Maus freigeben / Pause |
|
||
|
||
## Architektur
|
||
|
||
| Datei | Verantwortlichkeit |
|
||
|---|---|
|
||
| `index.html` / `style.css` | Markup, UI (Overlay, Hotbar, Crosshair, HUD), Importmap |
|
||
| `js/constants.js` | Block-/Biome-/Atlas-Konstanten, Tile-Mapping |
|
||
| `js/config.js` | Zentrale Einstellungen (Grafik, Performance, Spieler, Welt) |
|
||
| `js/rng.js` | Seeded PRNG (mulberry32) + Hashes |
|
||
| `js/noise.js` | Noise-Funktionen (Terrain, Biome, Höhlen) + FBM |
|
||
| `js/textures.js` | Prozeduraler 16×16-Texturatlas |
|
||
| `js/worldgen.js` | Terrain, Biome, Höhlen, Wasser, Bäume |
|
||
| `js/mesher.js` | Face-Culling-Meshing → opake + transparente Geometrie |
|
||
| `js/world.js` | Chunk-Storage, Block-Zugriff, Streaming, Mesh-Verwaltung |
|
||
| `js/player.js` | Bewegung, Gravitation, AABB-Kollision, Fly/Schwimmen |
|
||
| `js/raycast.js` | DDA-Voxel-Raycast (Amanatides & Woo) |
|
||
| `js/input.js` | Tastatur-/Maus-Input + Pointer-Lock |
|
||
| `js/main.js` | Scene/Renderer/Licht, Game-Loop, Interaktion, HUD |
|
||
|
||
## bewusst weggelassen (Out of Scope)
|
||
|
||
Crafting, Gegner/NPCs, Erze.
|