/// <summary>
    /// 绘制立方体
    /// </summary>
    public void DrawMesh(Mesh mesh, SoftRenderDrawMode drawMode = SoftRenderDrawMode.Triangles)
    {
        currentDrawMesh = mesh;

        // 坐标/旋转与缩放
        angel = (angel + 1) % 720;
        Vector3 rotation      = new Vector3(angel, angel, angel);
        Vector3 scale         = new Vector3(1, 1, 1) * 0.5f;
        Vector3 worldPosition = new Vector3(0, 0, 0);

        // 构建M矩阵
        Matrix4x4 modelMatrix = Matrix.GetModelMatrix(worldPosition, rotation, scale);
        // 构建V矩阵
        Matrix4x4 viewMatrix = camera.GetViewMatrix();
        // 构建P矩阵
        Matrix4x4 projectionMatrix = camera.GetProjectionMatrix();

        // 构建MVP矩阵
        //Matrix4x4 MVPMatrix = projectionMatrix * viewMatrix * modelMatrix;

        //// 给每个顶点引用一份MVP矩阵
        //foreach (int i in mesh.triangles) {
        //    Vertex v = mesh.vertices[i];
        //    v.mMatrix = modelMatrix;
        //    v.vMatrix = viewMatrix;
        //    v.pMatrix = projectionMatrix;
        //}
        mesh.mMatrix = modelMatrix;
        mesh.vMatrix = viewMatrix;
        mesh.pMatrix = projectionMatrix;


        DrawElement(mesh, modelMatrix, viewMatrix, projectionMatrix, drawMode);
    }
    public void DrawMesh(Mesh mesh, Vector3 position, Vector3 scale, Vector3 rotation, SoftRenderDrawMode softRenderDrawMode)
    {
        // 构建M矩阵
        Matrix4x4 modelMatrix = Matrix.GetModelMatrix(position, rotation, scale);
        // 构建V矩阵
        Matrix4x4 viewMatrix = camera.GetViewMatrix();
        // 构建P矩阵
        Matrix4x4 projectionMatrix = camera.GetProjectionMatrix();

        // 构建MVP矩阵
        //Matrix4x4 MVPMatrix = projectionMatrix * viewMatrix * modelMatrix;

        // 给每个顶点引用一份MVP矩阵
        //foreach (int i in mesh.triangles) {
        //    Vertex v = mesh.vertices[i];
        //    v.mMatrix = modelMatrix;
        //    v.vMatrix = viewMatrix;
        //    v.pMatrix = projectionMatrix;
        //}
        mesh.mMatrix = modelMatrix;
        mesh.vMatrix = viewMatrix;
        mesh.pMatrix = projectionMatrix;


        DrawElement(mesh, modelMatrix, viewMatrix, projectionMatrix, softRenderDrawMode);
    }
    /// <summary>
    ///     根据传递的Vertex数组和triangleIndex数组来绘制3D图形
    ///         triangleIndex表示顶点的顺序,triangleIndex[1] = 1,
    ///         表示第二个顶点是Vertex数组的第二个元素
    ///         绘制的规则是,
    ///         每三个成一个三角形进行绘制
    /// </summary>
    /// <param name="vertices"></param>
    /// <param name="triangle"></param>
    /// <param name="mvp"></param>
    /// <param name="drawMode">默认为连续三角形绘制</param>
    public void DrawElement(Mesh mesh, Matrix4x4 mMatrix, Matrix4x4 vMatrix, Matrix4x4 pMatrix, SoftRenderDrawMode drawMode = SoftRenderDrawMode.Triangles)
    {
        int[]    triangle = mesh.triangles;
        Vertex[] vertices = mesh.vertices;
        if (triangle.Length % 3 != 0)
        {
            return;
        }

        switch (drawMode)
        {
        case SoftRenderDrawMode.Triangles:
            for (int i = 0; i < triangle.Length; i += 3)
            {
                Vertex v1 = vertices[triangle[i]];
                Vertex v2 = vertices[triangle[i + 1]];
                Vertex v3 = vertices[triangle[i + 2]];

                DrawPrimitive(v1, v2, v3, mMatrix, vMatrix, pMatrix);
            }
            break;

        case SoftRenderDrawMode.Triangles_FUN:
            Vertex v_init = vertices[triangle[0]];
            for (int i = 1; i + 1 < triangle.Length; i += 2)
            {
                Vertex v2 = vertices[triangle[i]];
                Vertex v3 = vertices[triangle[i + 1]];

                DrawPrimitive(v_init, v2, v3, mMatrix, vMatrix, pMatrix);
            }
            break;

        case SoftRenderDrawMode.TRIANGLE_STRIP:

            Vertex vfirset = vertices[triangle[0]];
            Vertex vsecond = vertices[triangle[1]];
            Vertex vthird  = vertices[triangle[2]];

            DrawPrimitive(vfirset, vsecond, vthird, mMatrix, vMatrix, pMatrix);

            for (int i = 3; i < triangle.Length; i++)
            {
                Vertex v1 = vertices[triangle[i - 2]];
                Vertex v2 = vertices[triangle[i - 1]];
                Vertex v3 = vertices[triangle[i]];

                DrawPrimitive(v1, v2, v3, mMatrix, vMatrix, pMatrix);
            }

            break;
        }
    }