RotateCamera() Bug???

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
osta
Beiträge: 87
Registriert: 08.09.2004 11:48
Wohnort: Morsbach (Am Arsch der Welt)
Kontaktdaten:

RotateCamera() Bug???

Beitrag 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??
Benutzeravatar
freedimension
Admin
Beiträge: 1987
Registriert: 08.09.2004 13:19
Wohnort: Ludwigsburg
Kontaktdaten:

Beitrag von freedimension »

Wie groß ist der Bildschirm (in Pixeln)? Wie weit kannst du also deine Maus bewegen (ebenfalls in Pixeln)?
Beginne jeden Tag als ob es Absicht wäre!
Bild
BILDblog
osta
Beiträge: 87
Registriert: 08.09.2004 11:48
Wohnort: Morsbach (Am Arsch der Welt)
Kontaktdaten:

Beitrag 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...
Benutzeravatar
freedimension
Admin
Beiträge: 1987
Registriert: 08.09.2004 13:19
Wohnort: Ludwigsburg
Kontaktdaten:

Beitrag von freedimension »

osta hat geschrieben:das ist nicht von bedeutung, da MouseDeltaX() immer der gleiche Wert ist.
Seit wann? Oder wie meinst du das?
Beginne jeden Tag als ob es Absicht wäre!
Bild
BILDblog
Benutzeravatar
MUDHead
Beiträge: 107
Registriert: 08.09.2004 11:00
Wohnort: Berlin

Beitrag 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...
Zuletzt geändert von MUDHead am 17.09.2004 09:35, insgesamt 1-mal geändert.
Malus, qui potest rerum cognoscere.
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8679
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Beitrag 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.
Zuletzt geändert von NicTheQuick am 16.09.2004 16:28, insgesamt 1-mal geändert.
Bild
Benutzeravatar
MUDHead
Beiträge: 107
Registriert: 08.09.2004 11:00
Wohnort: Berlin

Beitrag von MUDHead »

*räusper* ja, na klar, war ja auch nur ... n Test!

:oops: :oops: :oops:

ERRARE HUMANUM EST.
Malus, qui potest rerum cognoscere.
osta
Beiträge: 87
Registriert: 08.09.2004 11:48
Wohnort: Morsbach (Am Arsch der Welt)
Kontaktdaten:

...

Beitrag 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???
Ich hänge zu oft und zu lange vor dem PC! Ich muss dringend was an meinem Lebenswandel verändern!.......
Nur heute geht's grad nicht.
Benutzeravatar
MUDHead
Beiträge: 107
Registriert: 08.09.2004 11:00
Wohnort: Berlin

Beitrag 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. :|
Malus, qui potest rerum cognoscere.
osta
Beiträge: 87
Registriert: 08.09.2004 11:48
Wohnort: Morsbach (Am Arsch der Welt)
Kontaktdaten:

Beitrag 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ß!
Ich hänge zu oft und zu lange vor dem PC! Ich muss dringend was an meinem Lebenswandel verändern!.......
Nur heute geht's grad nicht.
Antworten