void GLControl_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e) { Vector2 NewPosition = new Vector2(e.X, e.Y); Vector2 Delta = NewPosition - LastPosition; if (Delta.Length > 0f) { StartedClick = false; } if (!KeyboardHelper.CtrlDown() && !KeyboardHelper.ShiftDown() && !KeyboardHelper.AltDown()) { if (e.Button == System.Windows.Forms.MouseButtons.Left) { if (!IsRollOnly) { Vector2 Angles = new Vector2(-Delta.X, -Delta.Y); //Angles.Y = 0; Angles = Angles / 180f / 4f * (float)Math.PI; Camera.Orbit(Angles); } else { float Angle = -(Delta.X + Delta.Y) / 180f / 4f * (float)Math.PI; Camera.Roll(Angle); } } else if (e.Button == System.Windows.Forms.MouseButtons.Middle) { Camera.PanPixels(new Vector2(-Delta.X, Delta.Y)); } } if (!StartedClick) { MouseMove?.Invoke(Camera.GetRayThroughPixel(NewPosition), e); } LastPosition = NewPosition; }