private void DoKeyboardRotation()
        {
            var keyboardRotationX = 0.0;
            var keyboardRotationY = 0.0;
            var keyboardRotationZ = 0.0;

            if (_pressedKeys.Contains(_pitchUp))
            {
                keyboardRotationY = ApplicationConfiguration.KeyboardRotationDelta;
            }
            if (_pressedKeys.Contains(_pitchDown))
            {
                keyboardRotationY = -ApplicationConfiguration.KeyboardRotationDelta;
            }
            if (_pressedKeys.Contains(_yawUp))
            {
                keyboardRotationZ = ApplicationConfiguration.KeyboardRotationDelta;
            }
            if (_pressedKeys.Contains(_yawDown))
            {
                keyboardRotationZ = -ApplicationConfiguration.KeyboardRotationDelta;
            }
            if (_pressedKeys.Contains(_rollUp))
            {
                keyboardRotationX = ApplicationConfiguration.KeyboardRotationDelta;
            }
            if (_pressedKeys.Contains(_rollDown))
            {
                keyboardRotationX = -ApplicationConfiguration.KeyboardRotationDelta;
            }

            CameraViewModel.Rotate(keyboardRotationX, keyboardRotationY, keyboardRotationZ);
        }
        private void DoKeyboardMovement()
        {
            var delta = new Vector3D();

            if (_pressedKeys.Contains(_forward))
            {
                delta += CameraViewModel.UnaryForward;
            }
            if (_pressedKeys.Contains(_backward))
            {
                delta -= CameraViewModel.UnaryForward;
            }
            if (_pressedKeys.Contains(_left))
            {
                delta += CameraViewModel.UnaryLeft;
            }
            if (_pressedKeys.Contains(_right))
            {
                delta -= CameraViewModel.UnaryLeft;
            }
            if (_pressedKeys.Contains(_up))
            {
                delta += CameraViewModel.UnaryUp;
            }
            if (_pressedKeys.Contains(_down))
            {
                delta -= CameraViewModel.UnaryUp;
            }

            CameraViewModel.Move(delta);
        }
        private void DoOrbitMovement()
        {
            var sphereCenter = new Point3D(0, 0, 0);

            var mousePositionWhenButtonPressed = _pressedButtons[ApplicationConfiguration.OrbitMouseButton];
            var vector = mousePositionWhenButtonPressed - _currentMousePosition;

            if (vector.Length != 0)
            {
                vector.Normalize();
            }

            var rotationY = -vector.Y;
            var rotationZ = vector.X;

            var transformGroup = new Transform3DGroup
            {
                Children = new Transform3DCollection
                {
                    new RotateTransform3D(new AxisAngleRotation3D(CameraViewModel.UnaryLeft, rotationY), sphereCenter),
                    new RotateTransform3D(new AxisAngleRotation3D(CameraViewModel.UnaryUp, rotationZ), sphereCenter)
                }
            };

            //This does the orbiting
            var newPosition = transformGroup.Transform(CameraViewModel.Position);

            CameraViewModel.Move(newPosition);

            //This makes the camera face the center of the sphere
            CameraViewModel.LookAt(sphereCenter);
        }
 private void DoMouseWheelMovement()
 {
     if (_wheelDelta > 0)
     {
         _wheelDelta--;
         CameraViewModel.Move(CameraViewModel.UnaryForward * ApplicationConfiguration.MouseWheelDelta);
     }
     else if (_wheelDelta < 0)
     {
         _wheelDelta++;
         CameraViewModel.Move(-CameraViewModel.UnaryForward * ApplicationConfiguration.MouseWheelDelta);
     }
 }
        private void DoMouseRotation()
        {
            var mousePositionWhenButtonPressed = _pressedButtons[ApplicationConfiguration.RotateMouseButton];
            var vector = mousePositionWhenButtonPressed - _currentMousePosition;

            if (vector.Length != 0)
            {
                vector.Normalize();
            }

            vector = vector * ApplicationConfiguration.MouseRotationDelta;

            CameraViewModel.Rotate(0, -vector.Y, vector.X);
        }
        private void DoMousePanMovement()
        {
            var mousePositionWhenButtonPressed = _pressedButtons[ApplicationConfiguration.PanMouseButton];
            var vector = mousePositionWhenButtonPressed - _currentMousePosition;

            if (vector.Length != 0)
            {
                vector.Normalize();
            }

            var movementVector = CameraViewModel.UnaryUp * vector.Y + CameraViewModel.UnaryLeft * vector.X;

            CameraViewModel.Move(movementVector * ApplicationConfiguration.MousePanDelta);
        }