anchor.diff:      } else if (cpk[Key.S] != null) {
         moveBackward(0.03);
       }
  -    
  -    if( cpk[Key.SPACE] != null) {
  -      momentum.scale( 0.92 );
  -    }
  -    
  -    if( mouseY!=0)
  -      camera.lookUp(mouseY*0.00006);
  -    if( mouseX!=0)
  -      camera.lookLeft(-mouseX*0.00003);
  -
  -    camera.translateFromVec( momentum );
  -  }
  -  
  +
  +    if (cpk[Key.SPACE] != null) {
  +      momentum.scale(0.92);
  +    }
  +
  +    if (mouseY != 0) camera.lookUp(mouseY * 0.00006);
  +    if (mouseX != 0) camera.lookLeft(-mouseX * 0.00003);
  +
  +    camera.translateFromVec(momentum);
  +  }
  +
     void moveForward(double amount) {
       Vector back = camera.getBack();
       back.negate();
  -    momentum.lerp( back, amount);
  +    momentum.lerp(back, amount);
     }
     void moveBackward(double amount) {
       Vector back = camera.getBack();
  -    momentum.lerp( back, amount);
  -  }
  -  void moveUp( num amount) {
  +    momentum.lerp(back, amount);
  +  }
  +  void moveUp(num amount) {
       Vector up = camera.getUp();
  -    momentum.lerp( up, amount);
  -  }
  -  void moveDown( num amount) {
  +    momentum.lerp(up, amount);
  +  }
  +  void moveDown(num amount) {
       Vector up = camera.getUp();
       up.negate();
  -    momentum.lerp( up, amount);
  -  }
  -  void moveLeft( num amount) {
  +    momentum.lerp(up, amount);
  +  }
  +  void moveLeft(num amount) {
       Vector right = camera.getRight();
       right.negate();
  -    momentum.lerp( right, amount);
  -  }
  -  void moveRight( num amount) {
  +    momentum.lerp(right, amount);
  +  }
  +  void moveRight(num amount) {
       Vector right = camera.getRight();
  -    momentum.lerp( right, amount);
  -  }
  -}
  -
  -class FPSCamera extends Animatable
  -{
  +    momentum.lerp(right, amount);
  +  }
  +}
  +
  +class FPSCamera extends Animatable {
     Camera camera;
     Vector momentum = new Vector();
     Vector movement = new Vector();
  
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];
  