Winkelanpassung

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

Ananas

Betreff: Winkelanpassung

BeitragDo, Mai 27, 2010 20:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Hey ich habe wieder mal ein Problem Very Happy
habe eine 3D-Figur und möchte jetzt dass die Kamera immer automatisch an den Winkel der Figur angepasst wird. Aber der Winkel soll sanft angepasst werden, was bedeutet dass der Spieler auch mal direkt in die Kamera schauen kann (die nach ein paar Sekunden dann aber automatisch wieder hinter den Spieler drehen soll bis Kamera+ Figur den selben Winkel haben.
Jetzt mein eigentliches Problem: Die Kamera soll natürlich immer auf die Seite drehen auf die der Winkel kleiner ist! Nicht dass die Cam sich um 300 Grad dreht, wenn es andersrum nur 60 Grad gewesen wären... Ich habe lange herumprobiert aber es gibt immer wieder Fehler beim Übergang der Winkel von 360 auf 0 ... Sad
Hier mein kläglicher Versuch (einer von vielen):

Code: [AUSKLAPPEN]

TurnEntity cam,0,(winkelSpieler-WinkelKamera)/50,0  ; geteilt durch 50 für sanftes Schwenken


Hatte einer schonmal das selbe Problem? Oder irgendein Genie hier der gerade eine richtige Formel auftischen kann? Very Happy
Wäre echt froh, thx

mfg

Der Eisvogel

BeitragDo, Mai 27, 2010 20:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Gabs schon. Hehe: https://www.blitzforum.de/foru...hp?t=30496
Ich hatte das Problem auch schon. Das kam bei raus. Das funktioniert wunderbar.

MfG
Der Eisvogel
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D
Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB
Projekte: Window-Crasher
Ich liebe es mit der WinAPI zu spielen.

Ananas

BeitragDo, Mai 27, 2010 20:38
Antworten mit Zitat
Benutzer-Profile anzeigen
@Eisvogel, danke schonmal, bin jetzt bei diesem Code hier gelandet, hoffe du meintest den... Ist leider in BMax darum konnte ichs ned reinkopieren^^ Falls du (oder jemand anders) das vielleicht schnell in B3D Code übersetzen könntest wäre ich dankbar Razz

Code: [AUSKLAPPEN]

Function angleDifference:Float(a1:Float, a2:Float)
   a1 = Mod2(a1, 360)
   a2 = Mod2(a2, 360)
   Return ((a2 - a1 + 540) Mod 360) - 180
End Function

Function Mod2:Int(x:Int, finis:Int)
   While x < 0; x:+finis; Wend
   While x >= finis; x:-finis; Wend
   Return x
End Function

Thunder

BeitragDo, Mai 27, 2010 20:42
Antworten mit Zitat
Benutzer-Profile anzeigen
BlitzBasic: [AUSKLAPPEN]
Function angleDifference#(a1#, a2#)
a1 = Mod2(a1, 360)
a2 = Mod2(a2, 360)
Return ((a2 - a1 + 540) Mod 360) - 180
End Function

Function Mod2(x,finis)
While x < 0: x=x+finis: Wend
While x >= finis: x=x-finis: Wend
Return x
End Function
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit

Ananas

BeitragDo, Mai 27, 2010 21:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke Thunder und Eisvogel, es funktioniert Smile
(obwohl ich keinen Schimmer hab wieso, aber egal Wink )

Der Eisvogel

BeitragDo, Mai 27, 2010 21:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Sry, hab übersehen das ich das in BM gefragt habe, hätte ich das noch bemerkt hätte ich es auch übersetzt.

Zum Thema "Verstehen": Ich habe damals auch nicht kapiert warum es funktioniert. Und.. heute kapier ich es immernoch nicht, aber Hauptsache ist ja, dass es funktioniert. Wink
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D
Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB
Projekte: Window-Crasher
Ich liebe es mit der WinAPI zu spielen.
 

Blitzjockey

BeitragDo, Mai 27, 2010 21:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Grob gesagt, wird erst der Winkel zwischen 0° und 360° gebracht. z.b. Ein Winkel von 365° wird auf 005° zurück gebracht. Damit sind beide Winkel "normalisiert."

Um anschliessend den kurzesten Weg zu bestimmen wird den winkel um 180° gedreht.

Wenn z. B. Euer Fall eintritt, wobei 1 Winkel 350° beträgt, und den Zweiten Winkel 005°, wäre unter normale Bedingungen den kurzeste Weg linksrum, auch wenn dass 345° sind. Zumindest rechnerisch. Jetzt verschieben wir die ganze Sache um 540° (-> 1 1/2 Vollkreis ist 360° + 180°), dann wäre dass (relatief gesehen) 170° und 185°.
Und damit ist es wieder einfach zu bestimmen welche Richtung man drehen muss. (rechtsrum, statt linksrum)

Aber vielleicht habt ihr mehr Mühe mein Deutsch zu entziffern, als den ganze Sache zu durchschauen.. Hauptsache, es Funktioniert...

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group