void mouseZone_MouseMove(object sender, MouseEventArgs e) { if (IsActive) { _viewport.Cursor = Cursors.None; var centerOfViewport = _viewport.PointToScreen(new Point(_viewport.ActualWidth / 2, _viewport.ActualHeight / 2)); var relativePos = e.MouseDevice.GetPosition(_viewport); var actualRelativePos = new Point(relativePos.X - _viewport.ActualWidth / 2, _viewport.ActualHeight / 2 - relativePos.Y); var dx = actualRelativePos.X; var dy = actualRelativePos.Y; _yaw += dx; _pitch += dy; // Rotate RawRotation = QuaternionHelper.EulerAnglesInDegToQuaternion(_pitch * Sensitivity * 0.1, _yaw * Sensitivity * 0.1, 0); UpdatePositionAndRotation(); // Set mouse position back to the center of the viewport in screen coordinates MouseUtilities.SetPosition(centerOfViewport); } else { _viewport.Cursor = Cursors.Arrow; } }