Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Di Jul 15, 2025 07:29

Foren-Übersicht » Programmierung » Einsteiger-Fragen
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 14 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Di Feb 26, 2008 18:01 
Offline
DGL Member
Benutzeravatar

Registriert: Di Nov 29, 2005 21:11
Beiträge: 88
Wohnort: Bonn
Moin Moin!

Ich habe die NewtonGameDynamics in ein Programm eingebaut. Nun versuche ich, ein billiges "6-Quad-Auto" damit zu steuern.
Das funktioniert im Groben und Ganzen auch, nur die Fahrphysik ist eher suboptimal.
Das Auto fängt sehr schnell an zu schliddern und lässt sich so gut wie gar nicht mehr kontrollieren. Es fährt, aber es entwickelt ein starkes Eigenleben.
Ähnliches wiederfährt mir, wenn ich die Car-Demo von Sascha Willems spiele. Ich kann mir vorstellen, dass sie ein realistisches newtonsches Fahrverhalten simuliert, aber ich bevorzuge es simpler. Nicht was den Programmieraufwand angeht, sondern den realitätsgrad der Fahrphysik...

Ich habe ein bisschen versucht, an Masse, Inertia, Torque und Omega zu schrauben, aber besser ist es nicht geworden.
Bei Torque und Omega habe ich Probleme mir die Werte vorzustellen, also was sie bewirken...

Hier kann man das Programm runterladen, zum nachvollziehen... http://www.bewaltz.de/shisho.rar

Und hier noch der Code vom ForceAndTorque-Callback:
Code:
  1. procedure TAuto.ForceAndTorqueCallback;
  2. var
  3.   Force: TGLVectorf3;
  4. begin
  5.   Force[0] := 0;
  6.   Force[1] := 0;
  7.   Force[2] := -10*Mass;
  8.   NewtonBodySetForce(NewtonBody, @Force[0]);
  9.  
  10.   if Drive then
  11.   begin
  12.     NewtonBodyGetMatrix(NewtonBody, @Matrix);
  13.  
  14.     if (myEventHandler.Keyboard[SDLK_UP]) then
  15.     begin
  16.       Force[0] := 0;
  17.       Force[1] := 200;
  18.       Force[2] := 0;
  19.       Force := RotateVector(Force, Matrix);
  20.       NewtonBodyAddForce(NewtonBody, @Force[0]);
  21.     end;
  22.     if (myEventHandler.Keyboard[SDLK_DOWN]) then
  23.     begin
  24.       Force[0] := 0;
  25.       Force[1] := -200;
  26.       Force[2] := 0;
  27.       Force := RotateVector(Force, Matrix);
  28.       NewtonBodyAddForce(NewtonBody, @Force[0]);
  29.     end;
  30.  
  31.     if (myEventHandler.Keyboard[SDLK_LEFT]) then
  32.     begin
  33.       Force[0] := 0;
  34.       Force[1] := 0;
  35.       Force[2] := 2;
  36.       NewtonBodySetOmega(NewtonBody, @Force[0]);
  37.     end;
  38.     if (myEventHandler.Keyboard[SDLK_RIGHT]) then
  39.     begin
  40.       Force[0] := 0;
  41.       Force[1] := 0;
  42.       Force[2] := -2;
  43.       NewtonBodySetOmega(NewtonBody, @Force[0]);
  44.     end;
  45.     if (myEventHandler.Keyboard[SDLK_SPACE]) then
  46.     begin
  47.       Force[0] := 0;
  48.       Force[1] := 0;
  49.       Force[2] := 400;
  50.       NewtonBodyAddForce(NewtonBody, @Force[0]);
  51.     end;
  52.   end;
  53. end;
  54.  


Das sind meine ersten Versuche mit Newton, deswegen weiß ich noch nicht, welche Größen es alles gibt, die man sonst noch einstellen könnte...
Reibung fiele mir noch ein, aber danach habe ich noch nicht geguckt...

Hat jemand noch nen Tip... oder ne Meinung?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Feb 26, 2008 19:30 
Offline
DGL Member
Benutzeravatar

Registriert: Di Nov 07, 2006 13:37
Beiträge: 83
Wohnort: Partenheim
Was soll das denn mal werden? Soll das ein Kasten bleiben oder sollen da mal Räder dran?
Solange das nur ein Kasten ist, hast du natürlich keinen Seitenhalt, es sei denn, du baust ein paar Joints ein, die deinen Kasten stützen und in der Spur halten.

Conan

_________________
THE TRUTH IS NOT OUT THERE!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Feb 26, 2008 21:39 
Offline
DGL Member
Benutzeravatar

Registriert: Di Nov 29, 2005 21:11
Beiträge: 88
Wohnort: Bonn
Ich bin mir noch nicht sicher, wohin die Reise gehen soll... in jedem Falle wollte ich erstmal Newton Luft schnuppern.
Und weil ich dachte, dass direkt mit Vehicle-Container und Joints zu arbeiten eher einem Sprung in's kalte Wasser gleichkommt, habe ich halt einfach nen Kasten genommen...

Wäre es sehr großer Quatsch, wenn ich jetzt versuche, den Seitenhalt manuell irgendwie reinzubekommen oder sollte ich lieber direkt das Newton-Vehicle nehmen?
Und ist das Schliddern in Sascha Willems Car-Demo ne Frage der Parameter in Newton?

Mir passiert es im Moment manchmal, dass ich still stehe mit dem Auto und wenn ich dann Gas nach vorne gebe, dann hat er direkt Seitendrall mit dabei...
Falls das jemand nachvollziehen kann: Wie kommt das zu Stande? Wenn ich stehe, sind doch alle Kräfte null - wenn ich dann in eine Richtung beschleunige, kann ich doch nicht direkt Drall haben :?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Feb 26, 2008 23:28 
Offline
DGL Member
Benutzeravatar

Registriert: Di Nov 07, 2006 13:37
Beiträge: 83
Wohnort: Partenheim
Ich benutze selbst nicht den Vehicle-Container von Newton, da er mir einfach zu komplex ist. Ich hab' mir mein Auto selbst aus CustomJoints gebaut. Ich hab' mal 'ne kleine Demo hochgeladen, dann kannst du dir ein Bild machen, was möglich ist und ob du es auf diese Weise machen willst.

Conan

_________________
THE TRUTH IS NOT OUT THERE!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Feb 27, 2008 09:30 
Offline
DGL Member
Benutzeravatar

Registriert: Di Nov 29, 2005 21:11
Beiträge: 88
Wohnort: Bonn
Cool! Vielen Dank!

Das Zauberwort heißt also CustomJoints - wunderbar, dann les ich mich da mal rein...

Kann ich mir den Newton-Vehicle-Container eigentlich als eine Art Template vorstellen?
Also ich meine, haben den die Newton-Entwickler auch selbst aus den Newton-"Primitiven" zusammengebaut, um eine Art Auto-Template zur Verfügung zu stellen?

Wie kann ich mir Torque und Omega bildlich vorstellen?
Torque aka Drehmoment müsste doch ne Kraft in eine Richtung sein... dreht sich das Objekt in die Richtung oder um die Achse der Torque?
Und was ist dann Omega? Oder ist Omega einfach nur das Äquivalent zu Speed?

vielen Dank für deine Hilfe!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Feb 27, 2008 12:21 
Offline
DGL Member
Benutzeravatar

Registriert: Di Nov 07, 2006 13:37
Beiträge: 83
Wohnort: Partenheim
Das freut mich.
CustomJoints sind wirklich eine sehr starke Sache in Newton.
Das Prinzip des Vehicle-Containers sehe ich genauso wie du.

Im SDK steht zu Omega:
Zitat:
global angular velocity of the body

und zu Torque:
Zitat:
net torque applied to a rigid body
und zusätzlich
Zitat:
This function is only effective when called from NewtonApplyForceAndTorque callback
, was, denke ich, der Hauptunterschied ist. Torque ist wohl speziell dafür geeignet, einem Körper innerhalb des ForceAndTorqueCallbacks ein Drehmoment zu geben, wohingegen Omega die "angular velocity" beschreibt, also drei Werte, die jeweils die Geschwindigkeit für einen Winkel bedeuten, die sich zwar immer setzen lässt, aber sich z.B. für den Antrieb eines Autos durch einen Reifen nicht eignet (so meine Erfahrung).
Ich tu mich mit der Unterscheidung dieser beiden Begriffe aber auch sehr schwer. Bin leider kein Physiker.

Wenn ich mich richtig erinnere, setzt du mit Torque die Achse, um die sich der Körper drehen soll. Die Geschwindigkeit ist dann, glaube ich, der Betrag des übergebenen Vektors.

Bei CustomJoints brauchst du das alles aber nicht mehr (oder kaum noch).

Conan

_________________
THE TRUTH IS NOT OUT THERE!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Feb 27, 2008 13:15 
Offline
DGL Member
Benutzeravatar

Registriert: Di Nov 29, 2005 21:11
Beiträge: 88
Wohnort: Bonn
Ok, ich habe dem Auto einen Custom-Joint hinzugefügt...
In's Callback hab ich folgendes aus dem Newton Forum gepackt:
Code:
  1.   dir[0] := 0;
  2.   dir[1] := 0;
  3.   dir[2] := 1;
  4.   NewtonUserJointAddAngularRow(myJoint, 0, @dir);
  5.  

das war da in einem anderen zusammenhang, aber ich wollte nur gucken, ob überhaupt was passiert... und siehe da: Es passiert was! :shock:

Bis jetzt hat mein Auto keine Räder. Ich füge ihm nur mit AddForce eine Kraft in die Richtung zu, in die es guckt. Quasi ein Düsenantrieb 8)
Lenken habe ich mal mit SetOmega, mal mit AddTorque gemacht... keine Ahnung...

Ich würde jetzt versuchen, im JointCallback die Gesamtkraft zu nehmen und alles, was nicht in die Blickrichtung des Autos wirkt, zu entfernen... macht das Sinn?


Aber im allgemeinen bin ich ziemlich begeistert von Newton - es ist einfacher einzubauen, als ich befürchtet habe =)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Feb 27, 2008 13:31 
Offline
DGL Member
Benutzeravatar

Registriert: Di Nov 07, 2006 13:37
Beiträge: 83
Wohnort: Partenheim
Damit sind wir doch schonmal zwei :).
Ich habe lange nichts mehr damit gemacht, aber ich glaube, ich würde einfach zwei LinearRows hinzufügen, welche die Blickrichtung des (Düsen-)Autos haben. Diese halten dein Auto dann schonmal in der Spur. Für die Lenkung würde ich eine weitere AngularRow einbauen, wobei du als AngleError dann den Lenk-Winkel übergeben kannst. Aber probieren geht über studieren (und macht außerdem viel mehr Spaß ...), also teste ruhig mal etwas herum. Wenn du willst, schick' ich dir auch gerne den Code von dem kleinen Programm, das ich hochgeladen hab'.

Conan

_________________
THE TRUTH IS NOT OUT THERE!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Feb 27, 2008 16:04 
Offline
DGL Member
Benutzeravatar

Registriert: Di Nov 29, 2005 21:11
Beiträge: 88
Wohnort: Bonn
oh Gott, ich habe gerade versucht, mir ein paar wirkende Kräfte mit GL_LINES zu visualisieren... und da sind haarsträubende Dinge bei rumgekommen.
Ich schätze ich muss da noch mal grundsätzlicher drüber nachdenken...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Feb 27, 2008 18:59 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Sep 23, 2005 20:31
Beiträge: 212
Wohnort: Sachsen/ Vogtland
doppelreim hat geschrieben:
Bis jetzt hat mein Auto keine Räder. Ich füge ihm nur mit AddForce eine Kraft in die Richtung zu, in die es guckt. Quasi ein Düsenantrieb 8)

Ich habe mir auch einmal Gedanken um Newton gemacht, da ich für ein Projekt ein Panzermodell simulieren wollte. Dabei hab ich hin und her überlegt, wie ich die Ketten abbilden könnte. Die einfachste Lösung schien mir zu sein, das gesamte Modell (Wanne, Ketten, ...) an einem Stück (quasi mit deinem sogenannten Düsenantrieb) durch die Gegend zu schieben. Ich habs aber noch nicht ausprobiert. Sollte aber klappen, oder was denkt Ihr?

Grüße, DNA

_________________
Heute code ich, morgen debug ich, und übermorgen caste ich die Königin auf int.
http://www.2ndmoon.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Feb 27, 2008 20:17 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Ich hatte da auch mal was mit nem Panzer gemacht : http://www.newtondynamics.com/forum/vie ... light=tank

Ich hab das dort über die Materialien geregelt. Die Ketten haben also ein eigenes Material und funktionieren prinzipiell wie ein umgekehrtes Fliessband. Das hat auch soweit ganz brauchbar geklappt, allerdings ist mit Newton 1.53 die Generierung der Kontakte nicht ganz konsistent, so dass man z.B. auf flachem Boden u.U. an beiden Ketten eine unterschiedliche Zahl von Kontakten bekam und sich die Keten so nicht 100%ig korrekt verhielten, aber im Prinzip funzt das ganz gut. Ich sollts aus gegebenem Anlass evtl. mal einfach mit der aktuellen 2.00er beta probieren, evtl. heut Aben oder so.

Deine Idee, den Körper einfach mit Kräften zu bewegen, hab ich auch schonmal getestet, aber dass ist nicht ohne Probleme. Wenn der Panzer z.B. über eine Kuppe springt (ja, Panzer können springen, trotz des hohen Gewichtes) wirst du merken was ich meine.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Feb 28, 2008 08:52 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Sep 23, 2005 20:31
Beiträge: 212
Wohnort: Sachsen/ Vogtland
Sascha Willems hat geschrieben:
Ich hatte da auch mal was mit nem Panzer gemacht : http://www.newtondynamics.com/forum/vie ... light=tank

Ich hab das dort über die Materialien geregelt. Die Ketten haben also ein eigenes Material und funktionieren prinzipiell wie ein umgekehrtes Fliessband. Das hat auch soweit ganz brauchbar geklappt, allerdings ist mit Newton 1.53 die Generierung der Kontakte nicht ganz konsistent, so dass man z.B. auf flachem Boden u.U. an beiden Ketten eine unterschiedliche Zahl von Kontakten bekam und sich die Keten so nicht 100%ig korrekt verhielten, aber im Prinzip funzt das ganz gut. Ich sollts aus gegebenem Anlass evtl. mal einfach mit der aktuellen 2.00er beta probieren, evtl. heut Aben oder so.

Unter dem Link findet sich auch Deine Tank-Demo. Die sieht sehr gut aus. Sie verwendet jetzt schon die Flächen, oder? Man erkennt beim überfahren von "Kanten" kein "einsinken" in die Kante, daher vermute ich, dass die Kette ein starrer Körper ist.
Eine Alternative wäre die Simulation über z.B. 2x7 Räder. Das wurde ja auch in dem Thread angesprochen. Das sollte ja auch funktionieren, oder?

Sascha Willems hat geschrieben:
Deine Idee, den Körper einfach mit Kräften zu bewegen, hab ich auch schonmal getestet, aber dass ist nicht ohne Probleme. Wenn der Panzer z.B. über eine Kuppe springt (ja, Panzer können springen, trotz des hohen Gewichtes) wirst du merken was ich meine.

Hehe, ich weiß wie es ist, im Turm eines 50t Flakpanzers zu sitzen, welcher sich beim "zügigen" Überqueren einer Straße für ein nicht unerhebliches Stück vom Erdboden losgesagt hat. :) . Aber egal. Ich hab das in Newton noch nicht probiert, aber Du meinst bestimmt, dass ich die Richtung des Panzers auch noch in der Luft beeinflussen kann, oder?

Grüße,
DNA

_________________
Heute code ich, morgen debug ich, und übermorgen caste ich die Königin auf int.
http://www.2ndmoon.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Feb 28, 2008 13:04 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Bei dem "Düsenantrieb" bewegst du den Panzer als einzelnen Körper ja nur über eine lokale Kraft die in Fahrtrichtung wirkt, oder beim Wenden dann entsprechend an anderer Stelle wirkt und den Panzer dreht. Stell dir jetzt also ne ganz Spitze Berg"kuppe" vor, die dieser hinauffährt. Beim Hochfahren kein Problem, da der Panzer ja quasi in Steigrichtung zeigt, und damit auch die Kraft. Aber irgendwann kommt der auf die Kuppe, die Kraft wirkt dann immernoch in Blickrichtung des Panzers, zieht diesen dann also quasi in die Luft. Hier müsste man dann die Kraft (Schwerkraft als Gegenkraft reicht nicht, der Panzer muss schwer sein, ergo muss die Zugkraft groß sein, große Schwerkraft würde das aber nihilieren) so anpassen dass diese den Berghang hinunterzeigt. Technisch ginge dass mit einem Raycast runter aufs Terrain, und dann kann man ja anhand der Normale bei der Terrainintersektion ermitteln dass die Kraft nun nach unten ziehen soll. Klingt einfach, wird aber problematisch da man nicht einfach nur einen Punkt am Panzer holen kann, da müsste man dann evtl. mehrere Punkte nehmen und mitteln und son Kram. Im Prinzip geht das, ich hatte da mal wie bei dem Materialansatz nen Proof-of-Concept für, perfekt wars aber nicht.

Ich würds dann persönlich als erweitertes Raycastfahrzeug machen, also relativ viele (damit dicht) Kapseln/Zylinder die die Kette nachahmen und dann an jeder dieser Kapseln einen Raycast durchführen und dann halt eine recht straffe Federung simulieren, so hat man dann sogar recht realistisches Kettenverhalten da sich die Kapseln/Zylinder leicht nach oben/unten bewegen können.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Mär 05, 2008 15:49 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Falls sich jemand doch mal an panzerähnlicher Bewegung in Newton versuchen will :
http://www.newtondynamics.com/forum/vie ... php?t=4279

Die 2008er "Auflage" meiner alten Panzedemo, die jetzt fast perfekt funktioniert. Momentan gibts da nur ein Video, Julio will noch was an der Newton Engine optimieren (momentan werden Kontakte nicht immer perfekt erzeugt) bevor ich dann die Demo veröffentlichen darf. In der Entwicklersektion hab ich sie schon hochgeladen, dürft also ned mehr lang dauern. Im Thread steht übrigens auch drin wie genau ich das mache, prinzipiell ists sehr simpel, aber so wie es jetzt ist funktioniert es fast 100%ig und man könnte damit dutzende Panzer simulieren ohne schweren Geschwindigkeitsverlust.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 14 Beiträge ] 
Foren-Übersicht » Programmierung » Einsteiger-Fragen


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 14 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.012s | 14 Queries | GZIP : On ]