AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Newton Simulation beschleunigen
Thema durchsuchen
Ansicht
Themen-Optionen

Newton Simulation beschleunigen

Ein Thema von igel457 · begonnen am 24. Feb 2007 · letzter Beitrag vom 24. Feb 2007
Antwort Antwort
Benutzerbild von igel457
igel457

Registriert seit: 31. Aug 2005
1.622 Beiträge
 
FreePascal / Lazarus
 
#1

Newton Simulation beschleunigen

  Alt 24. Feb 2007, 12:44
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:
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;
Mit folgendem Code habe ich genau das gleiche Ergebnis:
NewtonUpdate(NewtonWorld, timegap); Mit
NewtonUpdate(NewtonWorld, 0.1); ist die Geschwindigkeit in Ordnung aber ist nun von den FPS abhängig.

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
Andreas
"Sollen sich auch alle schämen, die gedankenlos sich der Wunder der Wissenschaft und Technik bedienen, und nicht mehr davon geistig erfasst haben als die Kuh von der Botanik der Pflanzen, die sie mit Wohlbehagen frisst." - Albert Einstein
  Mit Zitat antworten Zitat
kolbaschedder

Registriert seit: 24. Aug 2006
Ort: Schwäbisch Gmünd
55 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Newton Simulation beschleunigen

  Alt 24. Feb 2007, 13:02
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
  Mit Zitat antworten Zitat
Nicolai1234

Registriert seit: 21. Feb 2004
1.008 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Newton Simulation beschleunigen

  Alt 24. Feb 2007, 13:19
Wie sieht den NewtonUpdate aus? Wenigstens mal der grobe Aufbau. Vielleicht liegt doch ja auch ein Fehler.
  Mit Zitat antworten Zitat
Benutzerbild von igel457
igel457

Registriert seit: 31. Aug 2005
1.622 Beiträge
 
FreePascal / Lazarus
 
#4

Re: Newton Simulation beschleunigen

  Alt 24. Feb 2007, 14:29
Zitat von kolbaschedder:
Wie erzeugst du deine 100FPS?
Habe ich doch gezeigt. Das ganze wird im OnIdle Event aufgerufen. Timegap ist die Zeit in Sekunden seit dem letzten Frame und FIntervall steht auf 100, somit werden 100FPS erzeugt.
Das geht schon und ist auch nicht mein Problem!

Zitat von kolbaschedder:
Verwndest du DirchtX, OpenGL oder die normale GDI?
Auch wenn auch das egal ist, ich verwende Andorra 2D.


Zitat von Nicolai1605:
Wie sieht den NewtonUpdate aus? Wenigstens mal der grobe Aufbau. Vielleicht liegt doch ja auch ein Fehler.
Ich habe den Sourcecode von NewtonUpdate nicht. Die Funktion liegt in der Newton.dll. Aber die beschreibung in der Dokumentation sagt:

Zitat von Newton Game Dynamics Dokumentation:
NewtonUpdate
void NewtonUpdate(const NewtonWorld* newtonWorld,dFloat timestep)

Advance the simulation by an amount of time.

Parameters
const NewtonWorld *newtonWorld - is the pointer to the Newton world
dFloat timestep - time step in seconds

Remarks
This function will advance the simulation by the amount of time specified by timestep. The Newton Engine does not perform sub-steps, and does not need tuning parameters. It is the responsibility of the application to ensure that timestep is small enough to guarantee physics stability.
Ich glaube, dass ihr mein Problem nicht richtig versteht. Also nochmal:
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
Andreas
"Sollen sich auch alle schämen, die gedankenlos sich der Wunder der Wissenschaft und Technik bedienen, und nicht mehr davon geistig erfasst haben als die Kuh von der Botanik der Pflanzen, die sie mit Wohlbehagen frisst." - Albert Einstein
  Mit Zitat antworten Zitat
Nicolai1234

Registriert seit: 21. Feb 2004
1.008 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Newton Simulation beschleunigen

  Alt 24. Feb 2007, 14:35
Zitat von igel457:
Ich glaube, dass ihr mein Problem nicht richtig versteht. Also nochmal:
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.
hmm, so habe ich das bisher nicht verstanden.
Reicht es dann nicht, wenn du
Delphi-Quellcode:
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;
in
Delphi-Quellcode:
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;
änderst?
  Mit Zitat antworten Zitat
Benutzerbild von igel457
igel457

Registriert seit: 31. Aug 2005
1.622 Beiträge
 
FreePascal / Lazarus
 
#6

Re: Newton Simulation beschleunigen

  Alt 24. Feb 2007, 14:44
Zitat von Nicolai1605:
in
Delphi-Quellcode:
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;
Du hast Recht, damit läuft es logischerweise schneller.
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
Andreas
"Sollen sich auch alle schämen, die gedankenlos sich der Wunder der Wissenschaft und Technik bedienen, und nicht mehr davon geistig erfasst haben als die Kuh von der Botanik der Pflanzen, die sie mit Wohlbehagen frisst." - Albert Einstein
  Mit Zitat antworten Zitat
Cöster

Registriert seit: 6. Jun 2006
589 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Newton Simulation beschleunigen

  Alt 24. Feb 2007, 18:35
Zitat von igel457:
FIntervall steht auf 100, somit werden 100FPS erzeugt.
Hm??? würde ein Intervall von 100 ms nicht 10 FPS bedeuten
  Mit Zitat antworten Zitat
Benutzerbild von igel457
igel457

Registriert seit: 31. Aug 2005
1.622 Beiträge
 
FreePascal / Lazarus
 
#8

Re: Newton Simulation beschleunigen

  Alt 24. Feb 2007, 19:51
Sorry, ich meinte natürlich dass FIntervall auf 10 steht.
Andreas
"Sollen sich auch alle schämen, die gedankenlos sich der Wunder der Wissenschaft und Technik bedienen, und nicht mehr davon geistig erfasst haben als die Kuh von der Botanik der Pflanzen, die sie mit Wohlbehagen frisst." - Albert Einstein
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:52 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz