Animation erstellen

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Johannes
Beiträge: 174
Registriert: Sa 9. Jan 2016, 09:30

Re: Animation erstellen

Beitrag von Johannes »

Mein Programmchen habe ich nun umgestellt. Mit dem Ergebnis bin ich sehr zufrieden.
Viele Funktionen wie z.B. "Arc" oder "Dashed Line" sind dabei.
Und endlich keine "Treppenlinien" und ausgefranste Konturen mehr.
Ich werde wohl in dieser Richtung weiter machen.

Danke

Hannes

Johannes
Beiträge: 174
Registriert: Sa 9. Jan 2016, 09:30

Re: Animation erstellen

Beitrag von Johannes »

Hallo
für meine Animation brauche ich einen Kreisbogen der um einen Punkt gedreht wird der auf dessen eigener Kontur liegt. (Kulisse/Schwinge)
BGRA bietet mir das zum Thema "Arc" an:

Code: Alles auswählen

 procedure LineTo(p: TPoint);
    procedure Arc(x1,y1,x2,y2,sx,sy,ex,ey: integer);
    procedure Arc(x1,y1,x2,y2,StartDeg16,LengthDeg16: integer);
    procedure Arc65536(x1,y1,x2,y2: integer; start65536,end65536: word; Options: TArcOptions);
    procedure Chord(x1,y1,x2,y2,sx,sy,ex,ey: integer);
    procedure Chord(x1,y1,x2,y2,StartDeg16,LengthDeg16: integer);
    procedure Pie(x1,y1,x2,y2,sx,sy,ex,ey: integer);
    procedure Pie(x1,y1,x2,y2,StartDeg16,LengthDeg16: integer);
    procedure RadialPie(x1,y1,x2,y2,StartDeg16,LengthDeg16: integer);        
Kann mir jemand diese Möglichkeiten ev. erklären?
Einen Kreisgogen kann ich darstellen lassen aber wie,z.B., sind die Winkelangaben zu verstehen? Wie muss ich "LengthDeg16" und "StartDeg16" sowie "start65536" und "end65536" verstehen?
Hab schon einige Zeit vergeblich versucht das zu selbst heraus zu finden.

Mit Grüßen

Hannes

Mathias
Beiträge: 6915
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Animation erstellen

Beitrag von Mathias »

StartDeg16,LengthDeg16
Dies ist etwas sehr komisches. Ein Vollkreis hat "5760", ein Halbkreis "5760 div 2".

http://lazarus-ccr.sourceforge.net/docs ... s.arc.html

Aber frage mich nicht, wie die auf so komische Werte kommen, vielleicht wollen sie vermeiden, das man mit Fliesskommazahlen arbeiten muss.

Code: Alles auswählen

Canvas.Arc(100, 100, 200, 200, 0, 5760 div 2); 
Dies zeichnet einen Halbkreis.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Johannes
Beiträge: 174
Registriert: Sa 9. Jan 2016, 09:30

Re: Animation erstellen

Beitrag von Johannes »

Hallo Mathias,
vielen Dank. Das hilft mir, hoffentlich, weiter.
Wie ist das gemeint: "start65536" und "end65536"?
Ich hoffe sehr Eure Geduld nicht zu sehr zu beanspruchen.
Es wird wohl noch ein langer und steiniger Weg für mich..

Mit dankbaren Grüßen

Hannes

Mathias
Beiträge: 6915
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Animation erstellen

Beitrag von Mathias »

Wie ist das gemeint: "start65536" und "end65536"?
Gucke mal am besten die Sourcen von Arc65536 an, da sieht man sicher was passiert.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Johannes
Beiträge: 174
Registriert: Sa 9. Jan 2016, 09:30

Re: Animation erstellen

Beitrag von Johannes »

Ich werde es versuchen.

Danke

Johannes
Beiträge: 174
Registriert: Sa 9. Jan 2016, 09:30

Re: Animation erstellen

Beitrag von Johannes »

Hallo,

dank der hier erhaltenen Unterstützung geht es bei mir weiter.
Jetzt möchte ich die Animation schneller ablaufen lassen. Bisher habe ich einen normalen Timer benutzt.
Der reicht leider nicht aus.
Was wäre für mich eine gute Alternative?
Soll ich die Zeichenroutine "OnIdle" aufrufen oder einen anderen Timer (z.B. Epiktimer) dazu nutzen?
Ein genau gleicher Ablauf auf verschiedenen Rechnern ist nicht unbedingt nötig.

Mit freundlichen Grüßen

Hannes

Mathias
Beiträge: 6915
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Animation erstellen

Beitrag von Mathias »

Jetzt möchte ich die Animation schneller ablaufen lassen. Bisher habe ich einen normalen Timer benutzt.
Ich kann mir schlecht vorstellen, das sich der normale Timer nicht eignet.
Was hast du für ein Intervall eingestellt ?
Meine OpenGL-Animationen benutzen einen Intervall von 10ms und die Animationen laufen ohne Ruckler,
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Johannes
Beiträge: 174
Registriert: Sa 9. Jan 2016, 09:30

Re: Animation erstellen

Beitrag von Johannes »

Hallo Mathias,
ich kann den Timer auf 10ms einstellen aber diesen Wert erreiche ich nicht. Unter (ca.) 100ms komme ich nicht.
Soll heißen: Wenn ich das Intervall ab 100ms, nach unten, reduziere erreiche ich keine sichtbare Änderung beim Lauf meiner Animation.
Das ist mir zu langsam um eine flüssige Bewegung darzustellen.
Momentan subtrahiere ich 0,03 Grad (Rad) pro "Takt" von meiner Drehbewegung (Treibachse) welche den Rest der Hebelei bewegt.

Code: Alles auswählen

procedure TSteuerung.TTAniTimer(Sender: TObject);
begin
 
  // Repaint;
   If Start then begin
       If VOR then begin
             alpha:= alpha+0.03;
             if alpha > 2 * Pi then begin
                   alpha:=alpha - (2* Pi);
             end;
             end;
       If not VOR then begin
              alpha:= alpha-0.03;
              if alpha < 0 then begin
                   alpha:=alpha  +(2* Pi);
             end;
           end;
          end;
        Winkel:=RadToDeg(alpha);
         EdWinkel.Text:= FloatToStrF((Winkel),ffNumber,5,1);
        Rechnen;
         Repaint;
end;                                                            
Gruß

Hannes

Mathias
Beiträge: 6915
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Animation erstellen

Beitrag von Mathias »

Momentan subtrahiere ich 0,03 Grad (Rad) pro "Takt" von meiner Drehbewegung
Wieso tust du nicht diesen Wert erhöhen, somit dreht sich deine Achse auch schneller.
Oder ruckelt bei dir die Animation, evt. PC zu langsam, Animation zu komplex ?


Aber irgendwie trotzdem komisch, bei der Animation im Anhang, kann ich den Timer.Intervall bis auf 1 runterschreiben, un dann dreht sich das Rad sehr schnell.


Nachtrag: Unter Windows läuft es nicht so schnell, da ist etwa bei 20 fertig.
Dateianhänge
Rad.zip
(125.46 KiB) 77-mal heruntergeladen
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Johannes
Beiträge: 174
Registriert: Sa 9. Jan 2016, 09:30

Re: Animation erstellen

Beitrag von Johannes »

Hallo Mathias,
danke für die Mühe.
Mein kleines Programm beinhaltet einige Formeln. Ob das schon komplex genannt werden sollte kann ich nicht beurteilen.
Wenn ich es starte geht meine CPU-Last auf ca. 30 %. (hab einen schnellen Rechner)
Ich nutze ja kein OGl oder DirectX.
Wenn ich den Wert (0,03) erhöhe mit dem ich den Drehwinkel aktualisiere wird der Ablauf schon schneller aber leider auch nicht mehr so flüssig wie ich es gern hätte.
Falls möglich wäre mein Bestreben noch kleinere Werte ,schneller, zu substrahieren/zu addieren.

Danke

Hannes

Mathias
Beiträge: 6915
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Animation erstellen

Beitrag von Mathias »

Wen du mein Programm laufen lässt, ist dir dies flüssig genug, oder stellst du etwas anderes unter flüssig vor ?

Ansonsten bau einen Zähler rein, welcher die Frames zählt.
Wen dieser Wert ca. 50 hat, dann ist die Animation schnell genug.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Johannes
Beiträge: 174
Registriert: Sa 9. Jan 2016, 09:30

Re: Animation erstellen

Beitrag von Johannes »

Wenn ich Dein Programm laufen lasse passt es schon, nur möchte ich, neben einem schnellen, auch einen langsamen Ablauf. Wenn ich ,z.B., in Deinem Programm 100ms für den Timer benutze so sieht man jeden Schritt etwas deutlich. Mache ich aus "0,03"" 0,01" wird das natürlich besser aber dann ist es schon vorbei mit einem schnellen Ablauf. (die Geschwindigkeit soll per Trackbar, und später automatisiert, verändert werden)
Hoffentlich habe ich mich verständlich ausgedrückt.

Mathias
Beiträge: 6915
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Animation erstellen

Beitrag von Mathias »

Normalerweise lässt man den Timer immer gleich schnell, zB. 20ms. Die Geschwindigkeit regelt man dann über den Schritt.

Bei Einem Autorennen auf dem PC in dies nicht anders. Die Bilder werden auch ca. alle 20ms neu aufgebaut.
Wen man dort schneller fährt, dann wird einfach das Auto um mehr Meter/Frames gerendert.
Steht aber das Auto, hast du 0 Meter/Frames, aber die Bilder werden trozdem alle 20ms neu gerendert.

Ich hoffe du verstehst, was ich meine.


Wen die Grafikkarte zu langsam ist, dann kann man natürlich die 20ms nicht einhalten, und das Spiel fangt an zu stottern.
Aber das sollte bei dir kein Probem sein, da deine CPU nur 30% Last hat.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Mathias
Beiträge: 6915
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Animation erstellen

Beitrag von Mathias »

Ich habe mein Rad ein wenig modifiziert, da sieht man gut wie man die Geschwindigkeit einstellen kann.
Dateianhänge
Rad.zip
(125.56 KiB) 79-mal heruntergeladen
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Antworten