Kamera mit Scripten programmieren ed

Der Variablen-Typ für eine Kamera ist Camera (bzw. camera = 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:

void main()
    // Blick-Winkel festlegen
    Cam.ang = vector(0.4, 0, 0) // leicht nach unten gekippt

// die Kamera dem Spieler folgen lassen
void OnIterate()

    // Blickrichtung durch Maus-Bewegung ändern
    Cam.ang.y += MouseD.x * 0.03

    // in einigem Abstand hinter der Figur
    Cam.pos = Ego.pos - Cam.ang.ang2dir() * 1000.0

Kamerafahrt ed

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

Beispiel:

void main()
    Cam.StartScript("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
    Cam2 = new Camera(v_0, v_0, rect(0, 1, 0.5, 1), true)

    // 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, r_id, false)
    c.texture_out = NixCreateDynamicTexture(512, 512)

    // Modell eines Objektes finden
    model m = GetObjectByName("Objekt_fuer_Test")

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

Beispiel (komplizierter):

void main()
    // Kamera in Textur umleiten
    Cam.show = false
    Cam.texture_out = NixCreateDynamicTexture(512, 512)

    // zusätzliche "Kamera" für die Nachbearbeitung durch Effekte
    camera v = new Camera(v_0, v_0, r_id, true)
    v.texture_in = Cam.texture_out
    v.shader = LoadShader("netter_shader")

    // könnte man auch noch durch eine weitere "Kamera" schicken....

                           Blue,                // blau
                           "test" )             // eigentlicher Text

    // ein Modell
    matrix mat
    MatrixRotation(mat, vector(0.5, 1.1, 0))
    picture3d p3d = CreatePicture3D( LoadModel("irgend_ein_model"), // ein Modell
                                     mat,                           // die Drehung
                                     0.1)                           // Bildschirm-Tiefe

    // Gruppierung abschliessen
    CurrentGrouping = nil

    float t = 0

    while true

        // Text-Anzeige fuer die Lebenspunkte verwenden
        txt.Str = "Lebenspunkte: " + f2s(ego.Life, 1)

        // die komplette Gruppe blinken lassen
        t += elapsed * 2
        group.Color.a = 0.7 + 0.3 * sin(t)

        wait_of()