anchor.diff:  part of glf;
   
   class CameraInfo {
  -  double aspectRatio;
  -  double fovRadians;
  -  double near;
  -  double far;
  +  /// used by Perpective projection
  +  double aspectRatio,fovRadians;
  +  /// used by Perpective AND Orthographic projection
  +  double near,far;
  +  /// used by Orthographic projection
  +  double left, right, bottom, top;
  +
  +  bool isOrthographic = false;
   
     final position = new Vector3(0.0, 0.0, 1.0);
     final focusPosition = new Vector3(0.0, 0.0, 0.0);
     final upDirection = new Vector3(0.0, 1.0, 0.0);
   
  -  final _projectionMatrix = new Matrix4.zero();
  -  final _viewMatrix = new Matrix4.identity();
  -  final _rotMatrix = new Matrix3.identity();
  -  final _projectionViewMatrix = new Matrix4.zero();
  +  ///DO NOT MODIFIED directly, direct access is provided to avoid copy for read
  +  final projectionMatrix = new Matrix4.zero();
  +  ///DO NOT MODIFIED directly, direct access is provided to avoid copy for read
  +  final viewMatrix = new Matrix4.identity();
  +  ///DO NOT MODIFIED directly, direct access is provided to avoid copy for read
  +  final rotMatrix = new Matrix3.identity();
  +  ///DO NOT MODIFIED directly, direct access is provided to avoid copy for read
  +  final projectionViewMatrix = new Matrix4.zero();
   
     updateProjectionMatrix() {
  -    setPerspectiveMatrix(_projectionMatrix, fovRadians, aspectRatio, near, far); // from vector_math
  +    if (isOrthographic) {
  +      setOrthographicMatrix(projectionMatrix, left, right, bottom, top, near, far);
  +    } else {
  +      setPerspectiveMatrix(projectionMatrix, fovRadians, aspectRatio, near, far); // from vector_math
  +    }
       updateProjectionViewMatrix();
     }
   
     updateViewMatrix() {
  -    setViewMatrix(_viewMatrix, position, focusPosition, upDirection);
  +    setViewMatrix(viewMatrix, position, focusPosition, upDirection);
       //_viewMatrix.getRotation()
  -    _rotMatrix.storage[0] = _viewMatrix.storage[0];
  -    _rotMatrix.storage[1] = _viewMatrix.storage[1];
  -    _rotMatrix.storage[2] = _viewMatrix.storage[2];
  -    _rotMatrix.storage[3] = _viewMatrix.storage[4];
  -    _rotMatrix.storage[4] = _viewMatrix.storage[5];
  -    _rotMatrix.storage[5] = _viewMatrix.storage[6];
  -    _rotMatrix.storage[6] = _viewMatrix.storage[8];
  -    _rotMatrix.storage[7] = _viewMatrix.storage[9];
  -    _rotMatrix.storage[8] = _viewMatrix.storage[10];
  +    rotMatrix.storage[0] = viewMatrix.storage[0];
  +    rotMatrix.storage[1] = viewMatrix.storage[1];
  +    rotMatrix.storage[2] = viewMatrix.storage[2];
  +    rotMatrix.storage[3] = viewMatrix.storage[4];
  +    rotMatrix.storage[4] = viewMatrix.storage[5];
  +    rotMatrix.storage[5] = viewMatrix.storage[6];
  +    rotMatrix.storage[6] = viewMatrix.storage[8];
  +    rotMatrix.storage[7] = viewMatrix.storage[9];
  +    rotMatrix.storage[8] = viewMatrix.storage[10];
       updateProjectionViewMatrix();
     }
   
     updateProjectionViewMatrix() {
  -    _projectionMatrix.copyInto(_projectionViewMatrix);
  -    _projectionViewMatrix.multiply(_viewMatrix);
  +    projectionMatrix.copyInto(projectionViewMatrix);
  +    projectionViewMatrix.multiply(viewMatrix);
     }
   
   }
   
  -class Viewport {
  +class ViewportCamera {
     int x = 0;
     int y = 0;
     int viewWidth;
  
positive.code:   }
  
    _setUniformProjectionMatrix(ProgramContext ctx) {
      injectMatrix4(ctx, camera._projectionMatrix, sfname_projectionmatrix);
    }
  
    _setUniformViewMatrix(ProgramContext ctx) {
      injectMatrix4(ctx, camera._viewMatrix, sfname_viewmatrix);
    }
  
    _setUniformRotMatrix(ProgramContext ctx) {
      injectMatrix3(ctx, camera._rotMatrix, sfname_rotmatrix);
    }
  
    _setUniformProjectionViewMatrix(ProgramContext ctx) {
      injectMatrix4(ctx, camera._projectionViewMatrix, sfname_projectionviewmatrix);
    }
  
    makeRequestRunOn() => new RequestRunOn()
  
negative.code:   //final _projectionInvMatrix = new Matrix4.zero();
  
    // default constructor;
    ViewportCamera();
  
    factory ViewportCamera.defaultSettings(CanvasElement canvas) {
      var b = new ViewportCamera()
      ..camera.fovRadians = degrees2radians * 45.0
      ..camera.near = 1.0
      ..camera.far = 100.0
  