Seite 1 von 1

Probleme mit Mouselook [gelöst]

Verfasst: 02.02.2015, 23:05
von Zudomon
Huhu!
Irgendwie scheint der Mouselook auf Windows 10 + Ultrawidescreen bei einer Auflösung von 2560x1080 nicht zu funktionieren.
In der Vertikalen läuft es, aber Horizontal scheint da was nicht zu stimmen.

Hier ein Video zu dem Problem:
[youtube]PA3yOdaGfWE[/youtube]

Also ein Mousemove-Event wird wohl ausgelöst und die Maus entsprechend zurückgesetzt. Allerdings schein sich der Wert wohl nicht zu ändern?
Wird bei Win10 und dieser Auflösung gar nicht mehr mit Integerwerten gerechnet?

Ferndiagnose ist irgendwie nicht so einfach...

Re: Probleme mit Mouselook

Verfasst: 03.02.2015, 11:01
von Top-OR
Moin Zudomon!

Mal ne dumme Frage zum Verständnis:
Machst du deine Maussteuerung mit DirectX (oder anderen Frameworks) oder Window-Messaging [also WM_HasteNichtGesehen Verarbeiten]?

Leider kann ich zur Windows 10 Problematik nichts sagen.

Aber wenn es da Probleme/Effekte beim Window-Messaging gibt, würde mich das auch interessieren...

Re: Probleme mit Mouselook

Verfasst: 03.02.2015, 13:53
von Schrompf
Logge doch mal die WM_MOUSEMOVE-Nachrichten. Für mich sieht das nach irgendnem Genauigkeitsproblem aus - bei schwachen Bewegungen passiert nix, bei starken Bewegungen dann heftige Dreher. Vielleicht benutzt Du irgendeinen zu kleinen Datentyp für die Berechnung und hast einen Überlauf? Oder konvertierst an der falschen Stelle zu Fließkomma?

Re: Probleme mit Mouselook

Verfasst: 03.02.2015, 15:11
von Krishty
Quaternion denormalisiert? :P

Re: Probleme mit Mouselook

Verfasst: 03.02.2015, 23:19
von Zudomon
Huhu! Sorry für die späte Antwort... der Schlaf fordert seinen Tribut.

Hier mal ein Stück Quellcode von der besagten Stelle
Die MouseRelativeDelta, MP und FetchPos sind alles TPoint, also 2 * Longint
Nochmal zum besseren Verständnis, was da passiert:
Also bei einem WM_MOUSEMOVE event wird, falls MouseFetch aktiv ist die neue Cursorposition ermittelt und in MP gespeichert.
Falls diese sich nun von der FetchPos (mitte des Fensters) unterscheidet, wird die Differenz zum MouseRelativeDelta addiert und
die Mause auf FetchPos zurück gesetzt. Also eigentlich recht trivial. Get- und SetCursorPos sind Delphi Funktionen:
function GetCursorPos(var lpPoint: TPoint): LongBool;
BOOL SetCursorPos( int X, int Y);

Code: Alles auswählen

    WM_MOUSEMOVE: begin
      if MouseFetch then begin
        GetCursorPos(MP);
        if (MP.X<>FetchPos.x) or (MP.Y<>FetchPos.y) then begin
          inc(MouseRelativeDelta.x, MP.x-FetchPos.x);
          inc(MouseRelativeDelta.y, MP.y-FetchPos.y);

          SetCursorPos(FetchPos.x, FetchPos.y);
        end;
      end else begin
        IState[0].MPos:= MP;
      end;
    end;
Ich nutze für die Rotation keine Quaternionen. Aber es könnte natürlich sein, dass dieser Codeabschnitt richtig läuft und der Fehler dann woanders liegt, also im Endeffekt wie Schrompf schon sagt.
Allerdings werden diese Werte dann direkt in ein TVec umgewandelt, also 4 * Single... da sollte dann auch nichts mehr gerundet werden oder so.
Aber ich werde dem mal nachgehen.
Danke schonmal! :D

Re: Probleme mit Mouselook

Verfasst: 03.02.2015, 23:47
von Zudomon
So dieses Video zeit nochmal, was passiert, wenn die Y-Achse nicht berücksichtigt wird.
Also die X-Veränderung findet statt, somit wird die Maus zurückgesetzt. Da scheint wohl der Fehler dann woanders zu liegen...
[youtube]xZrvb4RsFFE[/youtube]

Re: Probleme mit Mouselook

Verfasst: 04.02.2015, 00:07
von Zudomon
[youtube]TSO89kk9ErY[/youtube]
Schrompf hat geschrieben:Für mich sieht das nach irgendnem Genauigkeitsproblem aus
Du hast Recht gehabt! Oben neben der Uhrzeit steht nun der Y-Rotationswert... der ist bei mir so um 300 und damit ziemlich exakt... ich sollte den wohl mal einfach Frac()'en... außerdem frage ich mich, wie der Wert da zustande gekommen ist... ich bezweifle ja, dass er sich da millionen mal gedreht hat. Aber immer wieder schön, auf welche Fehler man immer gefasst sein muss...