Kamera Dreh Problem

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

 

Omenaton_2

Betreff: Kamera Dreh Problem

BeitragSo, Feb 11, 2007 16:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo !

Es ist ein etwas schwierig und umständlich mein Problem zu schildern, aber ich versuche es trotzdem.


Ich habe ein Raumschiff im 3D Raum. Es kann fliegen und ich kann die Kamera steuern, fast so wie ich es will aber eben nicht ganz.

Die meisten von euch kennen wahrscheinlich World of Warcraft. Ich mache die Kamera bei mir ganz genauso wie bei WoW. Das heißt:
Es beginnt in 3. Person View - Die Kamera befindet sich schräg hinter und über dem Charakter, in meinem Fall ein Raumschiff.
Man kann mit Mausrad rein und raus zoomen und wenn man sehr nahe ranzoomt, dann wechselt die Kamera zu einer anderen, 1. Person EgoShooter Kamera. Wenn man rauszoomt, dann kommt wieder die 3. Person Kamera zum Einsatz. Das funktioniert gut.
Wenn man die rechte Maustaste gedrückt hält und die Maus seitwärts bewegt, dann dreht sich das Raumschiff und die Kamera auch gleicher Maßen.
Wenn man die Linke Maustaste gedrückt hält, dann kann man die Kamera um das Schiff herum drehen (x und Y), ohne daß sich dabei das Schiff drehen würde. Nur die Ansicht ändert sich.
Hierbei kommt es zu einem unerwünschten und für mich bisher unerklärlichen Nebeneffekt, nach dem ich ein Mal die Kamera um die X-Achse gedreht habe (also wenn die Kamera flacher oder steiler auf das Schiff schauen soll).
Das Unerklärliche ist, daß wenn ich dann die Kamera nur noch seitwärts bewegen will (Wie flach soll gleich bleiben, nur die Richtung ändert sich), dann kommt es zu dem Phänomen, daß sich das Schiff es irgendwie scheinbar gemerkt hat an welcher Stelle ich schon mal die Kamera gekippt habe und wenn ich um das Schiff nur seitwärts kreise, kippt immer wieder an der selben Stelle die Kamera ein wenig. Ich gebe keinen Befehl für Kippen, nur für seitwärts, trotzdem kippt die Kamera.

Ergänzend muß ich sagen, daß ich die Kamera nicht direkt an das Schiff richte, sondern in der Mitte des Schiffes habe ich ein Pivot, der als Dreh- und PointEntity Punkt für die Kamera dient. Wenn ich also mit der linken Maustaste die Kamera seitwärts schiebe, dann bleibt das Schiff unangetastet, ich drehe (TurnEntity) nur den Kamera Pivot innerhalb des Schiffes und richte dann ständig die Kamera mit PointEntity auf den Pivot aus.

Für mein Spiel soll die gute Steuerung elemental wichtig sein, deshalb kann ich mir dabei keine Ungereimtheiten leisten. Es ist schon ganz ok so wie es ist, es ist nicht komplett falsch, aber ich will es perfekt machen und ich muß es wissen, wieso es zu einer unerwünschten Bewegung kommt.

Tankbuster

BeitragSo, Feb 11, 2007 16:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Könntest du bitte mal den Code posten?
Twitter
Download Jewel Snake!
Windows|Android
 

Omenaton_2

BeitragSo, Feb 11, 2007 17:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Tankbuster hat Folgendes geschrieben:
Könntest du bitte mal den Code posten?


Den ganzen Code kann ich nicht posten, das ist zu viel. Ich könnte eine Teil des Codes posten, wo es um Kamera Bewegung geht. Selbst das ist nicht wenig.
Ich warte erstmal 1 Tag, ob jemand nicht auch so sich vorstellen kann, warum etwas nicht stimmt. Was ich eventuell nicht bedacht habe. Wenn nicht, dann poste ich wahrscheinlich einen Teil des Codes.
 

Omenaton_2

BeitragDi, Feb 13, 2007 0:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Hier sind die Ausschnitte aus dem Code, von denen ich glaube, daß sie irgendwie die Kamera beeinflussen. Mehr solche Stellen konnte ich nicht finden:


Code: [AUSKLAPPEN]
; Das passiert vorne irgendwo ein Mal:

EntityParent CameraSpielfeld , PivotShipCam
PointEntity CameraSpielfeld, PivotShipCam
EntityParent Camera_1_Per, MOD_PlayerShip_p01


;--- M A U S -------------------------------------------------------
.Maus

;... Camera 3. Person Dreh und Zoom Check ..........................................................

If MouseDown(1) = True And CamModus = 3 Then
      
   If MouseX() < MXalt Then
   
      LockMaus = JA
      MXalt = MouseX()
      TurnEntity PivotShipCam, 0, 5, 0
      PointEntity CameraSpielfeld, PivotShipCam ;MOD_PlayerShip_p01      

   EndIf

   If MouseX() > MXalt Then
   
      LockMaus = JA
      MXalt = MouseX()
      TurnEntity PivotShipCam, 0, -5, 0
      PointEntity CameraSpielfeld, PivotShipCam ;MOD_PlayerShip_p01
   
   EndIf

   If MouseY() < (MYalt - 5) Then
   
      LockMaus = JA
      MYalt = MouseY()
      TurnEntity PivotShipCam, 2, 0, 0
      PointEntity CameraSpielfeld, PivotShipCam ;MOD_PlayerShip_p01
   
   EndIf

   If MouseY() > (MYalt + 5) Then
   
      LockMaus = JA
      MYalt = MouseY()
      TurnEntity PivotShipCam, -2, 0, 0
      PointEntity CameraSpielfeld, PivotShipCam ;MOD_PlayerShip_p01
   
   EndIf

EndIf


; Maus am Bildschirmrand

If MouseX() < 1 Then
   
   LockMaus = JA
   MXalt = MouseX()
   TurnEntity PivotShipCam, 0, 1, 0
   TurnEntity MOD_PlayerShip_p01,    0, 1, 0      
   PointEntity CameraSpielfeld, PivotShipCam;MOD_PlayerShip_p01      

EndIf
   
If MouseX() > 1277 Then
   
   LockMaus = JA
   MXalt = MouseX()
   TurnEntity PivotShipCam, 0, -1, 0
   TurnEntity MOD_PlayerShip_p01,    0, -1, 0         
   PointEntity CameraSpielfeld, PivotShipCam;MOD_PlayerShip_p01      
      
EndIf   



Return
;*** Tastatur ***************************************************
.Tastatur

If KeyDown(203) And LockSteuerungAll = NEIN Then ; (Links)
            
   TurnEntity MOD_PlayerShip_p01,    0, 1, 0
   TurnEntity PivotShipCam,       0, 1, 0   
   If CamModus = 3 Then PointEntity CameraSpielfeld, PivotShipCam
   If CamModus = 1 Then TurnEntity CameraSpielfeld, 0, 0.005,0
   ;TurnEntity CameraSpielfeld, 0, 0.005 * PlayerShip\AktSpeed, 0
   PlaySound (sndClick1)
      
EndIf

If KeyDown(205) And LockSteuerungAll = NEIN Then ; (Rechts)
         
   TurnEntity MOD_PlayerShip_p01,    0, -1, 0
   TurnEntity PivotShipCam,       0, -1, 0      
   If CamModus = 3 Then PointEntity CameraSpielfeld, PivotShipCam
   If CamModus = 1 Then TurnEntity CameraSpielfeld, 0, -0.005,0   
   ;TurnEntity CameraSpielfeld, 0, -0.005 * PlayerShip\AktSpeed, 0   
   PlaySound (sndClick1)
      
EndIf

Return
;*** Player Ship Status Anpassung an Werten ************************************************
.PlShipAnpassung

If PlayerShip\AktSpeed > 0 Then

   MoveEntity MOD_PlayerShip_p01,    0, 0, 0.005 * PlayerShip\AktSpeed
   ;MoveEntity PivotShipCam,       0, 0, 0.005 * PlayerShip\AktSpeed
   
   PositionEntity PivotShipCam,    EntityX#(MOD_PlayerShip_p01), 0, EntityZ#(MOD_PlayerShip_p01)
   PositionEntity SkyBox01_1,       EntityX#(PivotShipCam), 0, EntityZ#(PivotShipCam)

EndIf

Return

StepTiger

BeitragDi, Feb 13, 2007 0:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Rollt die Kamera, obwohl sie nur Drehen und Kippen soll?
Dreh einen Gegenstand mal so, dass er immer auf einem Punkt ausgerichtet ist und sich um jenen dreht.
90° y drehen
90° x kippen
-90° y drehen

und schon hast du die 90° z drehung.

rotateentity Ent,EntityPitch(Ent),EntityYaw(Ent),0

Ich hoffe, ich hab dein Problem verstanden.
Noch gestern standen wir am Abgrund, doch heute sind wir schon einen Schritt weiter.
Computer:
AMD Sempron 3000+; ATI Radeon 9800 Pro; 512 MB DDR RAM 400Mhz; Asus E7N8X-E Deluxe; Samsung 200GB HD 5.4ns acces t
Gewinner: BP Code Compo #2
Π=3.141592653589793238...<--- und das aus dem kopf Laughing
Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser.
 

Omenaton_2

BeitragDi, Feb 13, 2007 18:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Steptiger, danke für deine Antwort.
Nein, du scheinst das Problem nicht ganz richtig verstanden zu haben.

Stell dir vor, du schaust auf mein Raumschiff von oben. Das Problem ist, daß wenn ich die Kamera seitwärts drehe, in einem Bereich die Kamera auch zusätzlich leicht nach vorne kippt, obwohl es keinen ersichtlichen Grund dafür gibt. Dies passiert nur, nach dem ich vorher einmal die Kamera tatsächlich absichtlich nach vorne gekippt habe (entlang X Achse).
Das ganze ist nicht so schlimm wie es sich anhört. Im Grunde funktioniert die Steuerung fast so wie es soll.

StepTiger

BeitragDi, Feb 13, 2007 20:11
Antworten mit Zitat
Benutzer-Profile anzeigen
"Pointet" die Kamera auf irgendwas
Noch gestern standen wir am Abgrund, doch heute sind wir schon einen Schritt weiter.
Computer:
AMD Sempron 3000+; ATI Radeon 9800 Pro; 512 MB DDR RAM 400Mhz; Asus E7N8X-E Deluxe; Samsung 200GB HD 5.4ns acces t
Gewinner: BP Code Compo #2
Π=3.141592653589793238...<--- und das aus dem kopf Laughing
Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser.
 

Omenaton_2

BeitragMi, Feb 14, 2007 12:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, die Kamera pointet auf : PivotShipCam
Zu sehen in der Subrutine "Maus".


Aber du bringst mich damit auf eine Idee, ich werde heute Abend was ausprobieren. (Es ist aber unwahrscheinlich, daß das die Lösung sein wird.)
 

Omenaton_2

BeitragDo, Feb 15, 2007 12:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe gestern Abend nur sehr wenig Zeit gehabt, aber habe reingeschaut.
Ich habe jetzt Anzeigen für die aktuellen Winkeln des Schiffs, der Camera und Camera-Pivot eingebaut.

Es sieht so aus, daß wenn ich nahezu gleichzeitig eine Drehung auf der X und auf der Y Achse vornehme, ein wenig auch die Z Achse sich dreht.

Also, wenn ich das Schiff nach oben kippe und auch nach links drehe, dann kommt noch eine ungewollte Roll-Bewegung hinzu. (X + Y = Z Veränderung)
Ist das normal so (könnte ich mir durchaus vorstellen, daß es ist) oder sollte das nicht sein ?

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group