title: Moving PerspectiveCamera in the direction it is facing in C#
body: <p>I am currently working in a wpf application which has a <code>Viewport3D</code> camera.
  And I am creating a 3D walkthrough module. 
  I want my <code>PerspectiveCamera</code> to move based on the direction the it is facing after the Look Directions has changed.
  I am using my keyboard to control the movement, for example:<br>
  <code>NUMPAD8</code>: move forward<br>
  <code>NUMPAD2</code>: move backward<br>
  <code>NUMPAD4</code>: rotate left<br>
  <code>NUMPAD6</code>: rotate right  </p>
  
  <p>This method below is to detect keyboard event:  </p>
  
  <pre><code> private void button20_KeyDown(Object sender, KeyEventArgs e)
      {
          if (e.Key == Key.NumPad6)
          {
              Rotate(1);
          }
          else if (e.Key == Key.NumPad4)
          {
              Rotate(-1);
          }
          else if (e.Key == Key.NumPad8)
          {
              Move(-10);
          }
          else if (e.Key == Key.NumPad2)
          {
              Move(10);
          }
      }
  </code></pre>
  
  <p>This is to calculate rotation:</p>
  
  <pre><code>public void Rotate(double d)
      {
          double u = 0.05;
          double angleD = u * d;
          PerspectiveCamera camera = (PerspectiveCamera)Viewport3D.Camera;
          Vector3D lookDirection = camera.LookDirection;
          double L = lookDirection.Length;
          double D = 2 * L * Math.Sin(angleD / 2);
          double m = Math.Sqrt(lookDirection.X * lookDirection.X + lookDirection.Y * lookDirection.Y);
          double angleA = 2 * Math.Asin(D / (2 * m));
          double x = lookDirection.X;
          double y = lookDirection.Y;
          double angleB = Math.Atan2(y, x);
          double angleG = angleB - angleA;
          double newx = m * Math.Cos(angleG);
          double newy = m * Math.Sin(angleG);
          Vector3D NewlookDirection = new Vector3D(newx, newy, lookDirection.Z);
          camera.LookDirection = NewlookDirection;
  
      }
  </code></pre>
  
  <p>This is to calculate the camera movement:</p>
  
  <pre><code>public void Move(double d)
      {
          double u = 0.05;
          PerspectiveCamera camera = (PerspectiveCamera)Viewport3D.Camera;
          Vector3D lookDirection = camera.LookDirection;
          Point3D position = camera.Position;
          //Point3D NewPosition = new Point3D();
          position.Y += d;
          //NewPosition.X = position.X + u * lookDirection.X * d;
          //NewPosition.Y = position.Y + u * lookDirection.Y * d;
          //NewPosition.Z = position.Z + u * lookDirection.Z * d;
          //camera.Position = NewPosition;
          camera.Position = position;
      }
  </code></pre>
  
  <p>The rotation calculation works perfect but the movement seems not working good as it moves the camera based on the camera position instead of the facing direction after the rotation.</p>