// Apply the necessary matrices to the vertices in the buffer
        private void Prepare(List <Vector> vertexBuffer, Matrix modelMatrix)
        {
            vb.Clear();
            vb.AddRange(vertexBuffer);

            for (int i = 0; i < vb.Count; i++)
            {
                var temp = new Matrix(vb[i]);

                temp = modelMatrix * temp;
                temp = viewMatrix * temp;
                temp = Matrix.CreateWeakPerspective(d, temp.e[2, 0]) * temp;
                temp.Inverse();

                vb[i] = temp.ToVector();
            }

            // Viewport Transformation
            TransformVertices(viewPort, vb);
        }