![]() |
Newton Simulation beschleunigen
Hallo,
ich bin gerade dabei für meine 2D Engine ein Physiksystem mit Hilfe von Newton zu bauen. Das ganze Funktioniert soweit ganz gut. Problem ist nur, dass die Simulation schrecklich träge ist, d.h. meine Kisten fallen furchtbar langsam. Mit folgendem Code rufe ich die "NewtonUpdate" Funktion mit einer festgelegten Framerate (100FPS) auf:
Delphi-Quellcode:
Mit folgendem Code habe ich genau das gleiche Ergebnis:
FTime := FTime + timegap*1000; //Timegap ist die Zeit seit dem letzten Frame in Sekunden
while FTime > FInterval do begin FTime := FTime - FInterval; NewtonUpdate(NewtonWorld, FInterval / 1000); end;
Delphi-Quellcode:
Mit
NewtonUpdate(NewtonWorld, timegap);
Delphi-Quellcode:
ist die Geschwindigkeit in Ordnung aber ist nun von den FPS abhängig.
NewtonUpdate(NewtonWorld, 0.1);
In den Demos, die ich gefunden habe wird das ganze wie im ersten Code gemacht, allerdings fallen die Kisten dort mit "Normaler" geschwindigkeit. Ich denke, dass dies bei mir am Koordinatensystem liegt. Schließlich arbeitet meins mit absoluten Pixeln und in den 3D Anwendungen mit viel kleineren Fließkommazahlen. Kann ich irgendwie die Bewegungen schneller machen, also die gesamte Simulation beschleunigen? In der Dokumentation bin ich auf keine entsprechende Funktion gestoßen, aber vielleicht bin ich auch einfach nur Blind. Schonmal Danke, Igel457 |
Re: Newton Simulation beschleunigen
Hi,
welche Grafikschnittstelle verwndest du denn? Wie erzeugst du deine 100FPS? ein normaler Timer sollte das nicht schaffen ( minimale Zeitrate liegt glaub ich bei 55ms, was aber auc reichen würde). Nicht das deine ganze Rechenleistung fürs zeichnen draufgeht. Verwndest du DirchtX, OpenGL oder die normale GDI? Das nächste wären deine Funktion newtonUpdate(). vielleicht lässt sich da noch einiges rausholen |
Re: Newton Simulation beschleunigen
Wie sieht den NewtonUpdate aus? Wenigstens mal der grobe Aufbau. Vielleicht liegt doch ja auch ein Fehler.
|
Re: Newton Simulation beschleunigen
Zitat:
Das geht schon und ist auch nicht mein Problem! Zitat:
Zitat:
Zitat:
Die Simulation funktioniert Klasse. Leider sind die Bewegungen viel zu langsam was daher rührt, das mein Koordinatensystem um das Hundertfache größer ist als voreingestellt. Daher sind auch die Bewegungen um das Hundertfache langsamer. Ich suche nach einer Möglichkeit dem Newton direkt zu sagen, dass es alles mit 100 mal nehmen soll und habe gehofft das sich hier jemand damit auskennt. Trotzdem Danke, igel457 |
Re: Newton Simulation beschleunigen
Zitat:
Reicht es dann nicht, wenn du
Delphi-Quellcode:
in
FTime := FTime + timegap*1000; //Timegap ist die Zeit seit dem letzten Frame in Sekunden
while FTime > FInterval do begin FTime := FTime - FInterval; NewtonUpdate(NewtonWorld, FInterval / 1000); end;
Delphi-Quellcode:
änderst?
FTime := FTime + timegap*1000; //Timegap ist die Zeit seit dem letzten Frame in Sekunden
while FTime > FInterval do begin FTime := FTime - FInterval; NewtonUpdate(NewtonWorld, FInterval / 10); //Also *100 end; |
Re: Newton Simulation beschleunigen
Zitat:
Ich hatte nur gehofft, dass es da einen "schöneren" Weg gibt. So gaukle ich dem Newton ja einfach vor, es sei viel mehr Zeit zum letzten Frame vergangen. Ich werde es aber trotzdem mal so lassen. Nochmal Danke, igel457 |
Re: Newton Simulation beschleunigen
Zitat:
|
Re: Newton Simulation beschleunigen
Sorry, ich meinte natürlich dass FIntervall auf 10 steht.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:04 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz