public void MovingView(object sender, RoutedEventArgs e) { _origCameraBeforeMovingView = Camera; var newCamera = _origCameraBeforeMovingView.Clone(); #region set new camera animation Viewport.Camera = newCamera; const int duration = 3; var currentPosition = newCamera.Position; var nextPosition = new Point3D { X = currentPosition.X, Y = currentPosition.Y + 5, Z = currentPosition.Z }; var positionAnimation = new Point3DAnimation(currentPosition, nextPosition, TimeSpan.FromSeconds(duration)); positionAnimation.Completed += PositionAnimationCompleted; var currentLookDirection = new Vector3D(0, -5, -1); var nextLookDirection = new Vector3D(-nextPosition.X, -nextPosition.Y, -nextPosition.Z); var lookAnimation = new Vector3DAnimation(currentLookDirection, nextLookDirection, TimeSpan.FromMilliseconds(duration)); var transform3DGroup = new Transform3DGroup(); var rotateTransform3D1 = new RotateTransform3D(); var axisAngleRotation3D1 = new AxisAngleRotation3D(new Vector3D(0, 1, 0), 0.0); rotateTransform3D1.Rotation = axisAngleRotation3D1; transform3DGroup.Children.Add(rotateTransform3D1); newCamera.Transform = transform3DGroup; var tl = new DoubleAnimation(360, TimeSpan.FromSeconds(duration)); axisAngleRotation3D1.BeginAnimation(AxisAngleRotation3D.AngleProperty, tl); newCamera.BeginAnimation(PerspectiveCamera.PositionProperty, positionAnimation); newCamera.BeginAnimation(PerspectiveCamera.LookDirectionProperty, lookAnimation); #endregion }