Kamerafahrt im Kreis um Punkt herum

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Servus,


    ich hab ein kleines Problem: Es soll eine Kamerafahrt rund um den Spieler geben, das heißt einmal im Kreis schwenken.
    Es gibt im englischen Forum schon einiges dazu aber leider nur mit Timern oder noch schlimmer mit OnPlayerUpdate.
    Seit einer ganzen weile gibts ja die Funktionen:

    InterpolateCameraLookAt
    InterpolateCameraLook

    Ich hab mir den Code von InterpolateCameraLookAt genauer angesehen weil im englischen Wiki dazu folgender Befehl steht der ja eigentlich passen sollte:

    if(!strcmp(cmdtext, "/rotateme", true))
    {
    TogglePlayerSpectating(playerid, 1);
    InterpolateCameraLookAt(playerid, 50.0, 50.0, 10.0, -50.0, 50.0, 10.0, 10000, CAMERA_MOVE);
    // x1 y1 z1 x2 y2 z2
    // The camera starts off looking at (x1, y1, z1). It will then rotate and after
    // 10000 milliseconds (10 seconds) it will be looking at (x2, y2, z2).
    return 1;
    }

    Dann hab ich noch ein bisschen nachgedacht und angepasst:
    InterpolateCameraLookAt(1, 3041.315917, -2668.162353, 6.606627, -3041.315917, -2668.162353, 6.606627, 10000, CAMERA_MOVE);
    Die Koordinate vom Spieler wird ausgelesen und die zweite X Koordinate negiert sodass er sich eigentlich einmal im Kreis drehen müsste.
    Tut die Kamera leider nur nicht :(


    Hab ihr eine Idee?

  • Ohne Timer (bzw. OnPlayerUpdate) wirst du das nicht hinbekommen, ganz einfach deshalb, weil auch InterpolateCameraPos/LookAt nur gerade Strecken fährt (sprich die kürzeste Distanz zwischen den zwei Punkten), somit musst du aus vielen kleinen geraden Strecken einen Kreis machen (zum Beispiel ein 360-Eck).
    Denn, je mehr Ecken eine Fläche hat, desto mehr nähert sie sich einem Kreis an.

    (Quelle: http://www.lernkiosk.ch)


    Hast du also eine Fläche mit 360 Ecken, dann wäre jede Ecke ein Kamerapunkt, den du mit den trigonometrischen Funktionen (sin/cos/tan) errechnen kannst (Schleife durch alle Winkel (0-359)), indem du die Position eines Punktes auf einer Kreisbahn berechnest. Die Kamera lässt du dann vom Punkt 0° zum Punkt 1° bewegen, danach vom Punkt 1° zum Punkt 2° ... bis 358° zu Punkt 359° und wieder zu 0°.

    (Quelle: http://www.math.uni-leipzig.de)


    So würde sich die Kamera im Kreis drehen, wenn du als InterpolateCameraLookAt jeweils die Spielerposition nimmst, und als InterpolateCameraPos die errechnete Position auf dem "Kreis".

    (Quelle: http://www.math.uni-leipzig.de)



    Für ein Rechenbeispiel siehe: http://www.math.uni-leipzig.de…phics/theorie/dg_ber.html


    Alternativ kannst du dir dieses Tutorial anschauen:
    http://forum.sa-mp.com/showthread.php?t=291910


    Um einen Timer kommst du aber nicht herum (außer mit OnPlayerUpdate).