Tokamak relative Kräfte [Gelöst]

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

Lord_Vader

Betreff: Tokamak relative Kräfte [Gelöst]

BeitragMi, Aug 20, 2014 11:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,

seit langem mal wieder am rumprobieren mit Tokamak.
Jedoch gibt es ein kleines Problem bezüglich tokrb_applyimpulse.

Applyimpulse gibt nur einen Impuls in Absoluten koordinaten an. Ich will aber relativ zur richtung des objekts eine kraft wirken lassen. Genau das gleiche mit der drehung.

Gibt es eine Lib die das Umrechnet oder komme ich mit iwelchen Blitzbefehlen aus?

MfG Vader
  • Zuletzt bearbeitet von Lord_Vader am Mi, Aug 20, 2014 22:30, insgesamt einmal bearbeitet

DAK

BeitragMi, Aug 20, 2014 12:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich denke, TFormVector könnte dir damit helfen. Damit kannst du einen Vektor in Object Space transformieren.
Wenn du dem einen Vektor mit (0,0,1) gibst, solltest du den Forward-Vector für dein Objekt bekommen. (1,0,0) macht dir den Right-Vector und (0,1,0) gibt dir den Up-Vector.

Für die Rotationen bräuchtest du dann Matrix-Rechnung. Das ist nicht schwer, wenn man sich das mal angeschaut hat, und lässt sich auch recht gut programmieren.
Gewinner der 6. und der 68. BlitzCodeCompo

Lord_Vader

BeitragMi, Aug 20, 2014 12:48
Antworten mit Zitat
Benutzer-Profile anzeigen
hey,

ja danke also das mit den richtungen funktioniert einwandfrei!

Mit der drehung muss ich mal gucken. Hab probiert das ganze über sin und cos zu lösen...
Würde auch einfach sein wenn man nicht nach pitch->yaw und yaw->roll das gleiche ergebniss bekommen könnte Wink Da bin ich dann hängen geblieben...

Mal sehen ob ich iwelche tutorials finden kann dazu.

MfG Vader

Lord_Vader

BeitragMi, Aug 20, 2014 20:55
Antworten mit Zitat
Benutzer-Profile anzeigen
So habe das Ganze mal gelöst. Wenn auch mit viel rechenleistung, geht noch einfacher. Aber so gehts Wink
Poste das ganze nochmal im Codearchiv.

MfG Vader

Code: [AUSKLAPPEN]
Global relpiv=CreatePivot()

;Relative Kraft
Function relforce(rb,x#,y#,z#)
   
   Local xf#=0,yf#=0,zf#=0
   
   setpivot(rb)
   
   ;In X-Richtung
   TFormNormal 1,0,0,relpiv,0
   
   xf# = xf# + TFormedX() * x#
   yf# = yf# + TFormedY() * x#
   zf# = zf# + TFormedZ() * x#
   
   ;In Y-Richtung
   TFormNormal 0,1,0,relpiv,0
   
   xf# = xf# + TFormedX() * y#
   yf# = yf# + TFormedY() * y#
   zf# = zf# + TFormedZ() * y#
   
   ;In Z-Richtung
   TFormNormal 0,0,1,relpiv,0
   
   xf# = xf# + TFormedX() * z#
   yf# = yf# + TFormedY() * z#
   zf# = zf# + TFormedZ() * z#
   
   TOKRB_ApplyImpulse(rb,xf#,yf#,zf#)
   
End Function

;Relatives Drehen
Function relturn(rb,pitch#,yaw#,roll#)
   
   Local xf#,yf#,zf#
   
   setpivot(rb)
   
   
      
   ;X-Richtung (Yaw)
   TFormNormal 1,0,0,relpiv,0
   
   xf# = TFormedX() * yaw#
   yf# = TFormedY() * yaw#
   zf# = TFormedZ() * yaw#
   
   TFormPoint 0,0,1,relpiv,0 ;Angriffspunkt
   TOKRB_ApplyImpulse2(rb,xf# * 0.5,yf# * 0.5,zf# * 0.5,TFormedX(),TFormedY(),TFormedZ())
   
   TFormPoint 0,0,-1,relpiv,0 ;Angriffspunkt (Gegenüber, sonst drift)
   TOKRB_ApplyImpulse2(rb,xf# * -0.5,yf# * -0.5,zf# * -0.5,TFormedX(),TFormedY(),TFormedZ())
   
   ;In Y-Richtung (Pitch)
   TFormNormal 0,1,0,relpiv,0
   
   xf# = TFormedX() * pitch#
   yf# = TFormedY() * pitch#
   zf# = TFormedZ() * pitch#
   
   TFormPoint 0,0,1,relpiv,0 ;Angriffspunkt
   TOKRB_ApplyImpulse2(rb,xf# * 0.5,yf# * 0.5,zf# * 0.5,TFormedX(),TFormedY(),TFormedZ())
   
   TFormPoint 0,0,-1,relpiv,0 ;Angriffspunkt (Gegenüber, sonst drift)
   TOKRB_ApplyImpulse2(rb,xf# * -0.5,yf# * -0.5,zf# * -0.5,TFormedX(),TFormedY(),TFormedZ())

   ;In Z-Richtung (roll)
   TFormNormal 0,-1,0,relpiv,0
   
   xf# = TFormedX() * roll#
   yf# = TFormedY() * roll#
   zf# = TFormedZ() * roll#
   
   TFormPoint 1,0,0,relpiv,0 ;Angriffspunkt
   TOKRB_ApplyImpulse2(rb,xf# * 0.5,yf# * 0.5,zf# * 0.5,TFormedX(),TFormedY(),TFormedZ())
   
   TFormPoint -1,0,0,relpiv,0 ;Angriffspunkt (Gegenüber, sonst drift)
   TOKRB_ApplyImpulse2(rb,xf# * -0.5,yf# * -0.5,zf# * -0.5,TFormedX(),TFormedY(),TFormedZ())

   
End Function

Function setpivot(rb)
   
   PositionEntity relpiv,TOKRB_GetX(rb),TOKRB_GetY(rb),TOKRB_GetZ(rb)
   RotateEntity relpiv,TOKRB_GetPitch(rb),TOKRB_GetYaw(rb),TOKRB_GetRoll(rb)   
   
   
End Function

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group