Kamera mit Scripten programmieren ed

Der Variablen-Typ für eine Kamera ist Camera.

Jede Welt erschafft automatisch eine Standart-Kamera, die als cam angesprochen werden kann.

Mit new Camera können zusätzliche erschaffen werden.

Bewegung ed

Beispiel:

class MyCamera extends Camera

    vector vang

    void __init__()
        # Blick-Winkel festlegen
        vang = vector(0.4, 0, 0) # leicht nach unten gekippt

    # die Kamera dem Spieler folgen lassen
    override void on_iterate(float dt)

        # Blickrichtung durch Maus-Bewegung ändern
        vang.y += dmouse.x * 2.0
        ang = quaternion.rotation_v(vang)

        # in einigem Abstand hinter der Figur
        pos = pos - (ang * e_z) * 1000.0

Kamerafahrt ed

Im Editor können Kamerafahrten bearbeitet werden. Im Spiel werden sie per Camera.start gestartet bzw. mit Camera.stop vorzeitig beendet.

Beispiel:

void main()
    cam.start("meine_kamerafahrt", v_0)

Split-Screen ed

Beispiel:

void main()
    # bisherige Kamera auf obere Bildschirm-Hälfte einschränken
    cam.dest = rect(0, 1, 0, 0.5)

    # zusätzliche Kamera
    Camera *cam2 = new Camera(v_0, quaternion.ID, rect(0, 1, 0.5, 1))

    # von hier an beide Kameras verwenden (Positionen setzen...)

In Textur rendern ed

Beispiel:

void main()
    # eine weitere Kamera erschaffen, die nur in eine Textur rendert
    Camera *c = new Camera(v_0, v_0, rect.ID, false)
    c.output = new DynamicTexture(512, 512)

    # Modell eines Objektes finden
    Model *m = GetObjectByName("Objekt-für-Test")

    # Textur der Kamera auf das Modell legen
    m.material[0].texture[0] = c.output

Beispiel (komplizierter):

void main()
    # Kamera in Textur umleiten
    cam.show = false
    cam.output = new DynamicTexture(512, 512)

    # zusätzliche 'Kamera' für die Nachbearbeitung durch Effekte
    Camera *v = new Camera(v_0, v_0, rect.ID, true)
    v.input = cam.output
    v.shader = LoadShader("netter-shader")

    # könnte man auch noch durch eine weitere `Kamera` schicken....