/// <summary> /// Gets the 3D coordinates for the given mouse XY coordinates and depth value. /// </summary> /// <returns></returns> public Vector3 CoordFor(int x, int y, float depth) { Vector3 vec; Vector2 normCoords = OpenGLHelper.NormMouseCoords(x, Height - y, Width, Height); Vector3 cameraPosition = TargetPosition + invRotationMatrix.Row2 * Distance; vec.X = (normCoords.X * depth) * FactorX; vec.Y = (normCoords.Y * depth) * FactorY; vec.Z = depth - Distance; return(-cameraPosition + Vector3.Transform(invRotationMatrix, vec)); }
public void MouseWheel(MouseEventInfo e, KeyEventInfo k) { if (k.KeyCtrl) { float delta = -e.Delta * Math.Min(0.1f, _camera.Depth / 500f); delta *= _camera.TargetDistance; Vector2 normCoords = OpenGLHelper.NormMouseCoords(e.X, e.Y, _camera.Width, _camera.Height); Vector3 vec = _camera.InverseRotationMatrix.Row0 * -normCoords.X * delta * _camera.FactorX + _camera.InverseRotationMatrix.Row1 * normCoords.Y * delta * _camera.FactorY + _camera.InverseRotationMatrix.Row2 * delta; _camera.TargetPosition += vec; } else { Zoom(e.Delta * 0.1f * _camera.ZoomSpeed, true); } }
public void MouseWheel(MouseEventInfo e, KeyEventInfo k) { if (k.KeyShift) { float amount = e.Delta * 0.1f; _camera.KeyMoveSpeed += amount; } else { float delta = (e.Delta * Math.Min(k.KeyShift ? 0.04f : 0.01f, _camera.Depth / 500f)); Vector3 vec; Vector2 normCoords = OpenGLHelper.NormMouseCoords(e.X, e.Y, _camera.Width, _camera.Height); vec.X = (-normCoords.X * delta) * _camera.FactorX; vec.Y = (normCoords.Y * delta) * _camera.FactorY; vec.Z = delta; _camera.TargetPosition -= Vector3.Transform(_camera.InverseRotationMatrix, vec); } }