2016-07-22 21 views
-1

Meine Maus ist mit meinem Laptop verbunden, und mein Laptop ist ein Fernseher über HDMI angeschlossen. Wenn Sie nur den Bildschirm des Laptops als primären Bildschirm verwenden, ist die Position der Maus perfekt und es gibt kein Problem, das zu zeigen, und wenn Windows (mit dem Laptop-Bildschirm ODER TV als Display) verwendet wird, gibt es kein Problem mit der Maus - es ist nur innerhalb meiner GLFW-Anwendung, wenn ein externer Bildschirm als primäre Anzeige verwendet wird. Ich bekomme die Position der Maus mit einer Callback-Funktion, die eine vec2 zurückgibt, die mit glfwSetCursorPosCallback() festgelegt wird, so kann ich die Koordinaten der Maus jedes Frame mit mousePos.x und mousePos.y anzeigen.OpenGL/GLFW: Warum ist die erkannte Mausposition falsch, wenn ein Fernseher als Hauptanzeige für meinen Laptop verwendet wird?

Die spezifische Ungenauigkeit mit der Mausposition:

Wenn die Maus, um die Position bewegt wird, die Änderungen erkannt wird, aber diese erfasste Position ändert sich nicht zu stoppen, wenn die Maus nicht mehr bewegt. Dies könnte so beschrieben werden, als befände sich die Maus auf Eis, so dass sich die Position, wenn sie bewegt wird, weiter ändert und sich niemals verlangsamt. Die Position ist also genau, entspricht aber nicht der physischen Bewegung der Maus, denn - wie bereits erwähnt - höre ich auf, die Maus zu bewegen, aber die Position steigt für immer mit konstanter Geschwindigkeit an.

Dies kann am offensichtlichsten gesehen werden, wenn die Mausposition verwendet wird, um zur Kamera zu bewegen - die Kamera dreht sich gerade weiter, obwohl die Maus stationär ist.

Warum hätte die Verwendung eines externen Displays diesen Effekt auf die Mausposition/Bewegungserkennung?

Antwort

0

Ich habe es jetzt gelöst. Für alle, die das in der Zukunft finden ... benutzen Sie die neueste Version von GLFW! Die spezielle Version, die ich benutzte (3.1.2) hatte ein Problem mit glfwSetInputMode(window, GLFW_CURSOR, GLFW_CURSOR_HIDDEN), das die seltsame Bewegung des Cursors verursachte.

Dies wurde im 3.2 Update behoben - stellen Sie sicher, dass Sie dieses verwenden, wenn Sie auf dieses Problem stoßen!