Sprung von yaw=359 zu yaw=0 "abfangen"

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Hops

Betreff: Sprung von yaw=359 zu yaw=0 "abfangen"

BeitragSo, Nov 16, 2008 23:00
Antworten mit Zitat
Benutzer-Profile anzeigen
EDIT: verdammt, in die falsche Anfängerecke gerutscht -.- bitte verschieben! danke
EDIT2: Sorry, der yaw springt nicht von 359 auf 0 sondern von 180 auf -180 aber das problem bleibt das gleiche..

hiho
ich glaube das problem lässt sich relativ einfach erkennen aber ich finde keinen weg es zu umgehen:

meine 3rd person steuerung läuft so:
in einem cube sitzt ein pivot der durch mausbewegung um die y-achse gedreht wird.
die kamera folgt der drehung und so kann die kamera um den cube herum fliegen (zb zum betrachten der spielfigur).
wenn der cube bewegt werden soll dann richtet er sich "sanft" an der drehung des pivots in ihm aus während er losfährt sodass er in kamera-blickrichtung abdreht und weiterfährt.
für die ausrichtung wird die differenz von cube und pivot berechnet was bei der grenze, an der der "yaw" des pivots von 359 auf 0 springt während der cube noch einen yaw von zb 350 hat, zum problem führt:
richtigerweise berechnet das programm dann die differenz von zb 350 und der cube dreht sich wild um die achse wenn die linie von 359->0 oder andersrum überschritten wird.
zur veranschaulichung mal ein beispiel code:


Code: [AUSKLAPPEN]

;-----Voreinstellungen------
Graphics3D 1024,768
SetBuffer BackBuffer()
;-----Voreinstellungen------




;-----Testebene-----
Global test_plane = CreatePlane()

light = CreateLight()
MoveEntity light, 0,100,0
;-----Testebene-----



;---Auto---
Global car = CreateCube()
EntityColor car, 120,200,120
Global car_piv = CreatePivot()
Global target_piv = CreatePivot(car_piv)
MoveEntity target_piv, 0,4,-10

Global camera = CreateCamera()
;---Auto---




;-----Variablen-----
Global dyaw#
;-----Variablen-----









;-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ HAUPTSCHLEIFE +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Repeat
   
   steuerung()
   camera_steuerung()
   
   UpdateWorld
   RenderWorld
   
   Text 0,0,dyaw#
   
   Flip
   
Until KeyHit(1)
End
;-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ HAUPTSCHLEIFE +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+





;##############################################################################
;############################# FUNKTIONEN #####################################
;##############################################################################




;------------------------------------------------------------------------------

Function steuerung()
   
   
   TurnEntity car_piv, 0, -MouseXSpeed()/10, 0
   MoveMouse 1024/2,768/2
   
   
   If KeyDown(17) Then
      MoveEntity car, 0,0,0.1
      dyaw = EntityYaw(car_piv) - EntityYaw(car)
      TurnEntity car, 0, dyaw*0.1, 0
   EndIf
   
   PositionEntity car_piv, EntityX(car), EntityY(car), EntityZ(car)

End Function




;------------------------------------------------------------------------------

Function  camera_steuerung()
   
      dx#=EntityX( target_piv,True )-EntityX( camera )
      dy#=EntityY( target_piv,True )-EntityY( camera )
      dz#=EntityZ( target_piv,True )-EntityZ( camera )
      TranslateEntity camera,dx*.05,dy*.05,dz*.05
      
      PointEntity camera, car_piv
   
End Function




ich habe im moment leider noch keine ahnung wie man das ganze lösen könnte, was mich sehr ärgert da ich ungern auf diese sehr einfach und doch schön sanfte methode verzichten will Sad
ich hoffe auf eure unterstützung, vielen dank im vorraus!

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group