Kamera mit Scripten programmieren ed

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

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

Mit CreateView 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
    while(true)

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

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

        wait_of()

Kamerafahrt ed

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

Beispiel:

void main()
    Cam.StartScript( "meine_kamerafahrt", v0 )

Split-Screen ed

Beispiel:

void main()
    // bisherige Kamera auf obere Bildschirm-Haelfte einschraenken
    Cam.dest = rect( 0, 1, 0, 0.5 )

    // zusaetzliche Kamera
    view Cam2
    Cam2 = CreateView( v0, v0, 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
    view v = CreateView( v0, v0, nil, false )
    v.output_texture = NixCreateDynamicTexture( 512, 512 )

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

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

Beispiel (komplizierter):

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

    // zusaetzliche "Kamera" fuer die Nachbearbeitung durch Effekte
    view v = CreateView( v0, v0, NULL, true )
    v.input_texture = Cam.output_texture
    v.shader = LoadShader( "netter_shader" )

    // koennte 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()