Winkelanpassung
Übersicht

![]() |
AnanasBetreff: Winkelanpassung |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hey ich habe wieder mal ein Problem ![]() 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 ... ![]() 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? ![]() Wäre echt froh, thx mfg |
||
![]() |
Der Eisvogel |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
@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 ![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
BlitzBasic: [AUSKLAPPEN] Function angleDifference#(a1#, a2#) |
||
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit |
![]() |
Ananas |
![]() Antworten mit Zitat ![]() |
---|---|---|
Danke Thunder und Eisvogel, es funktioniert ![]() (obwohl ich keinen Schimmer hab wieso, aber egal ![]() |
||
![]() |
Der Eisvogel |
![]() Antworten mit Zitat ![]() |
---|---|---|
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. ![]() |
||
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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... |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group