anchor.diff:        lookAt[2] = z;
       }
     }
  -  
  +
     void setPosFromSpherical(double radius, double azimuth, double polar) {
       camera.setPosFromSpherical(radius, azimuth, polar);
       camera.addPosFromVec(lookAt);
       camera.lookAt(lookAt);
     }
  -  
  -  void animate( double elapsed)
  -  {
  +
  +  void animate(double elapsed) {
       if (cpk[Key.LEFT] != null) {
  -      azimuth+=(0.03);
  +      azimuth += (0.03);
       } else if (cpk[Key.RIGHT] != null) {
  -      azimuth-=(0.03);
  +      azimuth -= (0.03);
       }
       if (cpk[Key.UP] != null) {
  -      polar+=(0.03);
  +      polar += (0.03);
       } else if (cpk[Key.DOWN] != null) {
  -      polar-=(0.03);
  -    }
  -    if( cpk[Key.SPACE] != null) {
  -      azimuth=0.0;
  -      polar=0.0;
  -    }
  -    polar = polar.clamp(-Math.PI/2+0.1, Math.PI/2-0.1);
  -    setPosFromSpherical( radius, azimuth, polar);
  -  }
  -}
  -
  -class FlyingCamera extends Animatable
  -{
  +      polar -= (0.03);
  +    }
  +    if (cpk[Key.SPACE] != null) {
  +      azimuth = 0.0;
  +      polar = 0.0;
  +    }
  +    polar = polar.clamp(-Math.PI / 2 + 0.1, Math.PI / 2 - 0.1);
  +    setPosFromSpherical(radius, azimuth, polar);
  +  }
  +}
  +
  +class FlyingCamera extends Animatable {
     Camera camera;
     Vector momentum = new Vector();
  -  
  -  FlyingCamera( this.camera);
  -  
  -  void animate( double elapsed)
  -  {
  +
  +  FlyingCamera(this.camera);
  +
  +  void animate(double elapsed) {
       Map<int, bool> cpk = currentlyPressedKeys;
       Map<String, bool> cpmb = currentlyPressedMouseButtons;
  -    
  +
       if (cpk[Key.A] != null) {
         moveLeft(0.03);
       } else if (cpk[Key.D] != null) {
  
positive.code: part of chronosgl;
  
  class Camera extends Spatial
  {
    // Get the model view matrix. The view matrix is the inverse of the camera’s transformation matrix in world-space.
    void getMVMatrix( Matrix4 mvMatrix, bool translate) {
      transform.toRotationMat( mvMatrix); // why does this seem to be already inverted/transposed ?
      if( translate) {
        // The eye position is negated which is equivalent to the inverse of the translation matrix: T(v)^-1 == T(-v)
        // T = translation matrix, v = eye position.
        mvMatrix.translateLocal( -transform[12], -transform[13], -transform[14]); // short cut for rotationMatrixInverted * translationMatrixInverted, see http://3dgep.com/understanding-the-view-matrix/#Look_At_Camera
      }
    }
  }
  
negative.code:   double polar;
    Vector lookAt = new Vector();
  
    double ma = 0.0; // mouse azimuth
    double mp = 0.0; // mouse polar
  
    Map<int, bool> cpk = currentlyPressedKeys;
    Map<String, bool> cpmb = currentlyPressedMouseButtons;
  
    OrbitCamera(this.camera, this.radius, [this.azimuth = 0.0, this.polar = 0.0]) {
      HTML.document.onMouseWheel.listen((HTML.WheelEvent e) {
        try {
          double d = e.wheelDeltaY * 0.1;
          if (radius - d > 0) radius -= d;
        } catch (e) {
          print(e);
        }
      });
      HTML.document.onMouseMove.listen((HTML.MouseEvent e) {
        e.preventDefault();
        if (cpmb['left'] != null) {
          //azimuth += e.movement.x*0.01;
          //polar += e.movement.y*0.01;
          azimuth += (mouseX - mouseDownX)*0.01;
          polar += (mouseDownY - mouseY)*0.01;
          mouseDownX = mouseX;
          mouseDownY = mouseY;
  
        }
      });
    }
  
    void setLookAt(dynamic x, [double y, double z]) {
      if (x is Vector) {
        lookAt[0] = x[0];
        lookAt[1] = x[1];
        lookAt[2] = x[2];
  