Seite 1 von 2

RotateCamera() Bug???

Verfasst: 15.09.2004 15:33
von osta
Hi.
Ich hatte schon mal ins alte Forum gepostet, aber keine vernünftige Antwort bekommen.
Ich schreibe ein 3d-Ego shooter, mit einer BSP Map die ich in QuArK hergestellt habe. Man hat eine Camera, die über den ganzen bildschirm geht, mit dem FOV 45°. Nun brauche ich eine Variable für die Camere Rotation, weil es in PB nur die relative RotateCamera() gibt. Also habe ich eine Variable, die ich bei jedem Aufruf von Rotatecamera() + bzw. - die rrelative drehung mache z.B.:

Code: Alles auswählen

RotateCamera(0, -MouseDeltaX(), 0, 0)
camrotation = camrotation -MouseDeltaX()
Leider hat eine 360° drehung dann ungefähr das 5fache, was nicht ganz mein Wille ist. WIESO??

Verfasst: 15.09.2004 16:00
von freedimension
Wie groß ist der Bildschirm (in Pixeln)? Wie weit kannst du also deine Maus bewegen (ebenfalls in Pixeln)?

Verfasst: 15.09.2004 18:34
von osta
das ist nicht von bedeutung, da MouseDeltaX() immer der gleiche Wert ist. Ich hab es auch schon mit Tastatur versucht:

Code: Alles auswählen

If KeyboardPushed(#Pb_key_right) 
RotateCamera(0, 5, 0, 0, 0) 
camrotation = camrotation + 5 
EndIf 
Das Ergebnis ist gleich: Die Camera rotiert um ca. 5/5.988 oder so...

Verfasst: 16.09.2004 09:27
von freedimension
osta hat geschrieben:das ist nicht von bedeutung, da MouseDeltaX() immer der gleiche Wert ist.
Seit wann? Oder wie meinst du das?

Verfasst: 16.09.2004 15:11
von MUDHead
An der Stelle will ich mal fragen:

Ist es sinnvoll MouseDeltaX(Y)() bei einem Egoshooter zu benutzen, bei mir erscheint es immer ziemlich ruckelig.

Wenn man MouseDeltaX() benutzt, können drei Werte zurückgegeben werden
(EDIT: ein positiver Wert, wenn man die Maus nach rechts bewegt oder ein negativer, wenn die Maus nach links bewegt wird
(sry, aber konnte ich nicht so falsch lassen :) )).
Wenn man aber die Maus schneller bewegt, will man ja auch, dass sich der Blickwinkel schneller verändert, als wenn man die Maus langsam bewegt.
Wie ist das mit MouseDeltaX(Y)() möglich?

freedimension hat geschrieben:
osta hat geschrieben:
das ist nicht von bedeutung, da MouseDeltaX() immer der gleiche Wert ist.

Seit wann? Oder wie meinst du das?
würde ich auch gerne wissen...

Verfasst: 16.09.2004 15:22
von NicTheQuick
@MUDHead: Schonmal die Hilfe gelesen?
Syntax
  • Ergebnis = MouseDeltaX()

Beschreibung
  • Gibt die Mausbewegung auf der X-Achse (in Pixel) seit dem letzten Aufruf dieser Funktion zurück. Dies bedeutet, dass das Ergebnis entweder ein negativer oder ein positiver Wert sein kann, je nachdem ob die Maus seit dem letzten Aufruf nach links oder rechts bewegt wurde.

Verfasst: 16.09.2004 15:55
von MUDHead
*räusper* ja, na klar, war ja auch nur ... n Test!

:oops: :oops: :oops:

ERRARE HUMANUM EST.

...

Verfasst: 17.09.2004 08:10
von osta
Also MoseDeltaX() ist die beste Möglichkeit, die ich gefunden habe. Und es funzt.
Was ich mit gleich bleiben meine ist:
MouseDeltaX() verändert sich nur nach dem nächsten Aufruf von ExamineMouse(). Das heisst wenn ich CameraRotate mit MouseDeltaX() benutze, muss ich die Variable auch +/- MouseDeltaX() rechnen. Das Problem:
bei einer Umdrehung ist Die Variable dann 2155 oder so (also 5*360)
WARUM???

Verfasst: 17.09.2004 08:38
von MUDHead
osta hat geschrieben:bei einer Umdrehung ist Die Variable dann 2155 oder so (also 5*360)
Also ich will ja nicht schon wieder Mist erzählen, aber
Syntax

Ergebnis = MouseDeltaX()

Beschreibung
Gibt die Mausbewegung auf der X-Achse (in Pixel) seit dem letzten Aufruf dieser Funktion zurück.
Dies bedeutet, dass das Ergebnis entweder ein negativer oder ein positiver Wert sein kann, je nachdem ob die Maus seit dem letzten Aufruf nach links oder rechts bewegt wurde.


Wie willst du das zwischen zwei Aufrufen schaffen. :|

Verfasst: 29.09.2004 19:55
von osta
Ich meine die Variable von der Rotation! Versteht denn heir keiner das Problem? Baut euch eine 3d Welt und macht eine Variable für die rotation und lasst sie euch auf den Bildschirm schreiben! Ihr werdet sehen: Wenn sich die Camera einmal um sich selbst gedreht hat (also 360°) ist die Variable schon ca 5 mal so groß!