0 registered members (),
1,397
guests, and 7
spiders. |
Key:
Admin,
Global Mod,
Mod
|
|
|
Re: Winkelberechnungen
[Re: IngoS.]
#362965
03/10/11 14:53
03/10/11 14:53
|
Joined: Jun 2006
Posts: 2,640 Earth
Germanunkol
Expert
|
Expert
Joined: Jun 2006
Posts: 2,640
Earth
|
Die Differenz der Winkel beim Aufladen per ang_diff zu sichern und nach jedem Frame per ang_add zu updaten funktioniert nicht. genau so würde ich es aber versuchen. Wichtig ist dabei, dass du nicht jeden frame den winkel dazuaddierst sondern erst vec_set(my.pan, lkw.pan); und dann erst ang_rotate(my.pan, differenceAng); Außerdem müsstest du ang_rotate benutzen und nicht ang_add, je nachdem wie du ang_diff benutzt. Was genau klappt daran denn nicht? //beim aufladen: ang_diff(differenceAng, my.pan, lkw.pan); und dann jeden frame: vec_set(my.pan, lkw.pan); ang_rotate(my.pan, differenceAng);
~"I never let school interfere with my education"~ -Mark Twain
|
|
|
Re: Winkelberechnungen
[Re: ventilator]
#362970
03/10/11 15:08
03/10/11 15:08
|
Joined: Mar 2002
Posts: 154 Zschornewitz, Sachsen-Anhalt, ...
IngoS.
OP
Member
|
OP
Member
Joined: Mar 2002
Posts: 154
Zschornewitz, Sachsen-Anhalt, ...
|
...naja ich weis auch nicht warum es nicht funktioniert. Wenn ich beim Aufladen die Winkeldifferenz so berechne:
ang_diff(Item.aANG,Item.pan,KFZ.pan);
und nach dem Fahren es wieder auf das Item übertrage mit:
vec_set(Item.pan,KFZ.pan); ang_add(Item.pan,Item.aANG);
haut es nicht hin, die Ladung neigt sich je nach Neig- und Kippwinkel des KFZ. Hab schon alles mögliche versucht, auch mit ang_rotate usw.
Einzige Lösung die funktioniert ist wenn ich beim Aufladen den Winkel des KFZ und des Gegenstandes sichere und dann über die Differenz der KFZ Winkel das Item rotiere. Dann bräuchte ich aber einen Vector mehr zum speichern, aber das wollte ich gern verhindern, da noch eine Client/server Mechanismus dran hängt und ich Traffic sparen will.
|
|
|
Re: Winkelberechnungen
[Re: ventilator]
#362979
03/10/11 15:49
03/10/11 15:49
|
Joined: Mar 2002
Posts: 154 Zschornewitz, Sachsen-Anhalt, ...
IngoS.
OP
Member
|
OP
Member
Joined: Mar 2002
Posts: 154
Zschornewitz, Sachsen-Anhalt, ...
|
...tja, genau das habe ich auch schon getan, aber auch das haut nicht hin. Ich habe einfach die Vermutung das die anfangs berechnete Winkeldifferenz egal wie ich sie berechne nicht mehr anzuwenden ist, wenn das Fahrzeug fährt und die Winkel quasi umspringen.
Also ich meine wenn das Fahrzeug durch c_rotate bewegt wurde können ja pan,tilt,roll völlig unterschiedlich werden, aber das fahrzeug immernoch in die gleiche Richtung sein.
Ich habe das heute schon ein paar Stunden alles mir logische ausprobiert, leider ohne Erfolg.
|
|
|
Re: Winkelberechnungen
[Re: IngoS.]
#362986
03/10/11 16:17
03/10/11 16:17
|
Joined: Jun 2006
Posts: 2,640 Earth
Germanunkol
Expert
|
Expert
Joined: Jun 2006
Posts: 2,640
Earth
|
Ne, vec_rotateback rotiert ja 'ne richtung, keinen winkel. Ich hatte mal genau dieses Problem, mit Pfeilen die in einem Körper stecken bleiben sollten. Irgendwie haben wir das damals hinbekommen... Okay, ich hab's mal ausprobiert. Der Trick hier ist, dass ich einfach jeden Frame das Objekt so drehe wie das parent objekt sich gedreht hat.
VECTOR dirRestore, oldAng;
vec_diff(dirRestore, you.x, my.x);
vec_rotateback(dirRestore, my.pan);
VECTOR angRestore;
while(my)
{
my.pan += (key_cul-key_cur)*time_step*6;
my.tilt += (key_cuu-key_cud)*time_step*6;
vec_set(temp, dirRestore);
vec_rotate(temp, my.pan);
vec_set(you.x, temp);
ang_diff(angRestore, my.pan, oldAng);
ang_add(you.pan, angRestore);
vec_set(oldAng, my.pan);
wait(1);
}
Bei mir funktionierts. Edit: hatte noch vergessen: am anfang (wenn das objekt draufgeladen wird) musst du unbedingt vec_set(oldAng, my.pan); machen. Sonst springt es im ersten frame danach, weil oldAng noch 0,0,0 ist und damit ang_diff(angRestore, my.pan, oldAng); quark zurückgibt.
Last edited by Germanunkol; 03/10/11 16:20.
~"I never let school interfere with my education"~ -Mark Twain
|
|
|
|