3D-Grafik¶
OpenGL-3.3-basiertes 3D-Rendering direkt in der Runtime.
Minimales 3D-Fenster¶
setze win auf raum_erstelle("3D-Demo", 800, 600)
raum_perspektive(win, 45.0, 0.1, 100.0)
setze winkel auf 0.0
solange raum_offen(win):
raum_löschen(win, 0.05, 0.05, 0.15) # dunkelblau
raum_kamera(win, 0, 3, 8, 0, 0, 0) # von (0,3,8) auf (0,0,0) schauen
raum_push(win)
raum_rotiere(win, winkel, 1.0, 1.0, 0.0)
raum_würfel(win, 0, 0, 0, 1.0, "rot")
raum_pop(win)
raum_aktualisieren(win)
setze winkel auf winkel + 1.0
warte(16)
raum_schliessen(win)
Primitiven¶
raum_würfel(win, x, y, z, größe, farbe)
raum_kugel(win, x, y, z, radius, farbe, segmente)
raum_zylinder(win, x, y, z, radius, höhe, farbe)
raum_ebene(win, x, y, z, breite, tiefe, farbe)
raum_dreieck(win, x1,y1,z1, x2,y2,z2, x3,y3,z3, farbe)
Kamera¶
raum_kamera(win, augen_x, augen_y, augen_z, ziel_x, ziel_y, ziel_z)
raum_perspektive(win, fov_grad, nah, fern)
raum_maus_fangen(win) # First-Person-Modus
Transformation-Stack¶
raum_push(win) # Aktuelle Matrix auf Stack
raum_verschiebe(win, dx, dy, dz)
raum_rotiere(win, winkel_grad, ax, ay, az)
raum_skaliere(win, sx, sy, sz)
raum_würfel(win, 0, 0, 0, 1.0, "rot") # wird transformiert gezeichnet
raum_pop(win) # Matrix zurückholen
Eigene Meshes¶
Licht¶
Tag-Nacht-Zyklus¶
Welt-Engine¶
Für prozedurale Welten mit Perlin-Noise-Terrain, Biomen und Chunks:
importiere welt
setze welt auf welt_neu(seed=42, chunks=16)
welt_spieler_setzen(welt, 0, 20, 0)
solange raum_offen(win):
welt_update(welt, win)
welt_rendern(welt, win)
raum_aktualisieren(win)
Siehe auch¶
- Beispiel: welten.moo — das Flaggschiff (Perlin-Terrain + 6 Biome + FPS-Kamera)
- Beispiel: 3d_demo.moo — einfache rotierende Würfel
- Beispiel: wireframe.moo — Wireframe-Rendering
- Beispiel: raytracer.moo — Raytracer in moolang