Zum Inhalt

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

setze mesh auf raum_mesh_laden("modell.obj")
raum_mesh_zeichnen(win, mesh, x, y, z)

Licht

raum_licht_richtung(win, -0.5, -1.0, -0.3, 1.0, 0.95, 0.9)
raum_licht_umgebung(win, 0.2, 0.2, 0.3)

Tag-Nacht-Zyklus

# Zeit im Tag (0.0 = Mitternacht, 0.5 = Mittag)
raum_tageszeit(win, 0.3)                    # Morgendämmerung

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