Kamera weich auf Zielkoordinaten drehen / bewegen
Übersicht

Kernel32Betreff: Kamera weich auf Zielkoordinaten drehen / bewegen |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hab da gerade ein Problem und komme nicht so recht weiter. Die Kamera hängt irgendwo im Raum und zeigt in irgendeine Richtung. So.
Jetzt habe ich eine Zielkoordinate (x/y/z) und einen Zielwinkel (pitch und yaw -roll ist immer 0) und möchte, daß die Kamera von ihrer jetzigen Position "weich" an diese Zielposition fliegt und zugleich (ebenfalls weich) so rotiert, daß sie letzendlich den Zielwinkel einnimmt. Das bewegen zur Zielkoordinate klappt zwar, aber wie kann man das mit dem Rotieren lösen, so daß die Kamera den kürzesten winkel nimmt und sich "weich" in die gewünschte Position dreht? Code: [AUSKLAPPEN] cam_speed# = .025 ; GESCHWINDIGKEIT ; ZUR ZIELKOORDINATE BEWEGEN cx = (target_x-EntityX(Cam))*cam_speed cy = (target_y-EntityY(Cam))*cam_speed cz = (target_z-EntityZ(Cam))*cam_speed TranslateEntity Cam,cx,cy,cz |
||
-------------
Wollte neulich Herrn Brot anrufen, aber da war belegt. Dann hab ich bei Wheight Watcher's angerufen, aber niemand hat abgenommen. Schliesslich hab ich im Irak angerufen, aber dort war besetzt o.O |
![]() |
F |
![]() Antworten mit Zitat ![]() |
---|---|---|
Versuchs mal mit AlignToVector
https://www.blitzforum.de/help/AlignToVector Kannst auch DeltaYaw und DeltaPitch benutzen ![]() https://www.blitzforum.de/help/DeltaYaw https://www.blitzforum.de/help/DeltaPitch |
||
Signatur? Noch nie Gehört... |
Kernel32 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
AlignToVector funktioniert ja nicht, da dessen Parameter einen Zielpunkt beschreiben, also der Punkt, zu dem die Kamera schauen soll. Ich möchte aber nicht, daß die Kamera den Zielpunkt "anschaut", sondern den Zielpunkt und die Zielrotation einnehmen soll.
DeltaPitch und DeltaYaw benötigen ein Entity. Und selbst dann würde sich die Kamera ja wieder so ausrichten, daß sie darauf zeigt und nicht exakt diese Position und den Winkel selbst einnimmt. |
||
-------------
Wollte neulich Herrn Brot anrufen, aber da war belegt. Dann hab ich bei Wheight Watcher's angerufen, aber niemand hat abgenommen. Schliesslich hab ich im Irak angerufen, aber dort war besetzt o.O |
![]() |
F |
![]() Antworten mit Zitat ![]() |
---|---|---|
Dann erstellts du halt einen Pivot und richtest die Kamera auf diesen aus ![]() |
||
Signatur? Noch nie Gehört... |
Kernel32 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Glaube, du verstehst mich nicht ![]() |
||
-------------
Wollte neulich Herrn Brot anrufen, aber da war belegt. Dann hab ich bei Wheight Watcher's angerufen, aber niemand hat abgenommen. Schliesslich hab ich im Irak angerufen, aber dort war besetzt o.O |
![]() |
The_Nici |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du kannst dir ne Funktion schreiben, in dem du folgendes brauchst:
Operator <,>,=,+,- Funktionen Entitypitch ![]() Entityyaw ![]() Entityroll ![]() Vergleiche die aktuelle Rotation mit der Zielrotation. ![]() |
||
![]() |
F |
![]() Antworten mit Zitat ![]() |
---|---|---|
Verstanden hab ich dich schon!
Ein pivot ist unsichtbar Demnach kannst du ihn irgendwo hinsetzen (z.B. den Winkeln entsprechend) und niemand sieht ihn ![]() Andere Methode : Das mit dem Kürzesten Winkel bekommst du hin indem du zuerst den Unterschied zwischen dem Aktuellen Winkel und 180 berechnest. Dann frägst du ab ob der (Zeilwinkel + Unterschied) Mod 360 kleine oder Größer als 180 ist. Ist er größer addierst du was hinzu. Ist er kleiner ziehst du was ab. Beispiel Code: [AUSKLAPPEN] Graphics 320,240,16,2 SetBuffer BackBuffer() W# = 0 ;Aktueller Winkel W2# = 270 ; Zielwinkel Repeat Cls ; Linien Zeichnen { X# = 160 Y# = 120 WritePixel X#,Y#,255 For N=1 To 20 X# = X# + Cos(W#) Y# = Y# + Sin(W#) WritePixel X#,Y#,255 Next X# = 160 Y# = 120 WritePixel X#,Y#,255000 For N=1 To 20 X# = X# + Cos(W2#) Y# = Y# + Sin(W2#) WritePixel X#,Y#,255000 Next ; } Linien Zeichnen ; Winkelzeugs Berechnen (wichtig) { UNT# = 180 - W# ; Unterschied berechnen WINK# = (W2# + UNT) Mod 360 ; Winkel berechnen If WINK# < 180 Then W# = W# - 1 ; Wenn kleiner dann subtrahieren If WINK# > 180 Then W# = W# + 1 ; " größer " addieren ; } Winkelzeugs Berechnen (wichtig) Flip 0 Delay(10) Until KeyHit(1) End Bei EntityPitch\Yaw\Roll musst du das ganze anders aufbauen da diese dir Winkel von -180 (0) bis +180(360) zurückgeben ![]() |
||
Signatur? Noch nie Gehört... |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group