setPerspective(fov, near, far) {
        this.camera.setPerspective(fov, near, far, this.renderer._boundingRect.width, this.renderer._boundingRect.height, this.renderer.pixelRatio);

        // force camera update on context restoration
        if(this.renderer.state.isContextLost) {
            this.camera.forceUpdate();
        }

        this._matrices.projection.matrix = this.camera.projectionMatrix;

        if(this.camera._shouldUpdate) {
            // we changed the fov, update world sizes and world positions
            this._setWorldSizes();
            this._applyWorldPositions();

            // translation along the Z axis is dependant of camera CSSPerspective
            // we're computing it here because it changes when the fov changes
            this._translation.z = this.relativeTranslation.z / this.camera.CSSPerspective;
        }

        // if camera settings changed update the mvMatrix as well cause we need to update z translation based on new fov
        this._updateMVMatrix = this.camera._shouldUpdate;
    }
This will set our perspective matrix new parameters (fov, near plane and far plane)
     used internally but can be used externally as well to change fov for example

     params :
     @fov (float): the field of view
     @near (float): the nearest point where object are displayed
     @far (float): the farthest point where object are displayed
*