constructor({
                    fov = 50,
                    near = 0.1,
                    far = 150,
                    width,
                    height,
                    pixelRatio = 1,
                } = {}) {

        this.position = new Vec3();
        this.projectionMatrix = new Mat4();

        this.worldMatrix = new Mat4();
        this.viewMatrix = new Mat4();

        this._shouldUpdate = false;

        this.setSize();
        this.setPerspective(fov, near, far, width, height, pixelRatio);
    }
Here we create our Camera object
 Creates a perspective camera and its projection matrix (which is used by Plane's class objects)
 Uses a dirty _shouldUpdate flag used to determine if we should update the matrix

 params:
 @fov (float, optional): the perspective field of view. Should be greater than 0 and lower than 180. Default to 50.
 @near (float, optional): near plane, the closest point where a mesh vertex is drawn. Default to 0.1.
 @far (float, optional): far plane, farthest point where a mesh vertex is drawn. Default to 150.
 @width (float, optional): width used to calculate the camera aspect ratio. Default to the renderer container's width.
 @height (float, optional): height used to calculate the camera aspect ratio. Default to the renderer container's height.
 @pixelRatio (float, optional): pixel ratio used to calculate the camera aspect ratio. Default to the renderer's pixel ratio.

 returns:
 @this: our Mesh element
*