code: function Cam(gl) {
    this._projection = mat4.create();
    this._camModelView = mat4.create();
    this._modelView = mat4.create();
    this._rotation = mat4.create();
    this._translation = mat4.create();
    this._near = 0.10;
    this._onCameraChangedListeners = [];
    this._far = 4000.0;
    this._fogNear = -5;
    this._fogFar = 50;
    this._fog = true;
    this._fovY = Math.PI * 45.0 / 180.0;
    this._fogColor = vec3.fromValues(1, 1, 1);
    this._outlineColor = vec3.fromValues(0.1, 0.1, 0.1);
    this._outlineWidth = 1.0;
    this._outlineEnabled = true;
    this._selectionColor = vec4.fromValues(0.1, 1.0, 0.1, 0.7);
    this._center = vec3.create();
    this._zoom = 50;
    this._screenDoorTransparency = false;
    this._updateProjectionMat = true;
    this._updateModelViewMat = true;
    this._upsamplingFactor = 1;
    this._gl = gl;
    this._currentShader = null;
    this._stateId = 0;
    this.setViewportSize(gl.viewportWidth, gl.viewportHeight);
  }
docs: A camera, providing us with a view into the 3D worlds. Handles projection, and modelview matrices and controls the global render parameters such as shader and fog.