Animation erstellen
Re: Animation erstellen
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
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
Re: Animation erstellen
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:
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
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);
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
-
- 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
Dies ist etwas sehr komisches. Ein Vollkreis hat "5760", ein Halbkreis "5760 div 2".StartDeg16,LengthDeg16
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);
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
Re: Animation erstellen
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
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
-
- 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
Gucke mal am besten die Sourcen von Arc65536 an, da sieht man sicher was passiert.Wie ist das gemeint: "start65536" und "end65536"?
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
Re: Animation erstellen
Ich werde es versuchen.
Danke
Danke
Re: Animation erstellen
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
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
-
- 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
Ich kann mir schlecht vorstellen, das sich der normale Timer nicht eignet.Jetzt möchte ich die Animation schneller ablaufen lassen. Bisher habe ich einen normalen Timer benutzt.
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
Mit Java und C/C++ sehe ich rot
Re: Animation erstellen
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.
Gruß
Hannes
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;
Hannes
-
- 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
Wieso tust du nicht diesen Wert erhöhen, somit dreht sich deine Achse auch schneller.Momentan subtrahiere ich 0,03 Grad (Rad) pro "Takt" von meiner Drehbewegung
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
Mit Java und C/C++ sehe ich rot
Re: Animation erstellen
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
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
-
- 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
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.
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
Mit Java und C/C++ sehe ich rot
Re: Animation erstellen
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.
Hoffentlich habe ich mich verständlich ausgedrückt.
-
- 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
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.
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
Mit Java und C/C++ sehe ich rot
-
- 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
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
Mit Java und C/C++ sehe ich rot