computeVerticesUVs() {
        // geometry vertices and UVs
        this.attributes.vertexPosition.array = [];
        this.attributes.textureCoord.array = [];

        const vertices = this.attributes.vertexPosition.array;
        const uvs = this.attributes.textureCoord.array;

        for(let y = 0; y < this.definition.height; y++) {
            const v = y / this.definition.height;

            for(let x = 0; x < this.definition.width; x++) {
                const u = x / this.definition.width;

                // uvs and vertices
                // our uvs are ranging from 0 to 1, our vertices range from -1 to 1

                // first triangle
                uvs.push(u);
                uvs.push(v);
                uvs.push(0);

                vertices.push((u - 0.5) * 2);
                vertices.push((v - 0.5) * 2);
                vertices.push(0);

                uvs.push(u + (1 / this.definition.width));
                uvs.push(v);
                uvs.push(0);

                vertices.push(((u + (1 / this.definition.width)) - 0.5) * 2);
                vertices.push((v - 0.5) * 2);
                vertices.push(0);

                uvs.push(u);
                uvs.push(v + (1 / this.definition.height));
                uvs.push(0);

                vertices.push((u - 0.5) * 2);
                vertices.push(((v + (1 / this.definition.height)) - 0.5) * 2);
                vertices.push(0);

                // second triangle
                uvs.push(u);
                uvs.push(v + (1 / this.definition.height));
                uvs.push(0);

                vertices.push((u - 0.5) * 2);
                vertices.push(((v + (1 / this.definition.height)) - 0.5) * 2);
                vertices.push(0);

                uvs.push(u + (1 / this.definition.width));
                uvs.push(v);
                uvs.push(0);

                vertices.push(((u + (1 / this.definition.width)) - 0.5) * 2);
                vertices.push((v - 0.5) * 2);
                vertices.push(0);

                uvs.push(u + (1 / this.definition.width));
                uvs.push(v + (1 / this.definition.height));
                uvs.push(0);

                vertices.push(((u + (1 / this.definition.width)) - 0.5) * 2);
                vertices.push(((v + (1 / this.definition.height)) - 0.5) * 2);
                vertices.push(0);
            }
        }
    }
This method is used internally to create our vertices coordinates and texture UVs
     we first create our UVs on a grid from [0, 0, 0] to [1, 1, 0]
     then we use the UVs to create our vertices coords
*