public Bitmap DrawGuro(Bitmap tmpBmp, PointF[] point2D, Color[] colors, Point3D[] cubePoints)
        {
            var normals = LightingLibrary.CalculateNormals(cubePoints);

            DrawWatchablePolygons(tmpBmp, normals.Front,
                                  new List <PointF> {
                point2D[7], point2D[4], point2D[5], point2D[6], point2D[7]
            },
                                  new List <Color>()
            {
                colors[7], colors[4], colors[5], colors[6], colors[7]
            });

            DrawWatchablePolygons(tmpBmp, normals.Right,
                                  new List <PointF> {
                point2D[3], point2D[7], point2D[6], point2D[2], point2D[3]
            },
                                  new List <Color>()
            {
                colors[3], colors[7], colors[6], colors[2], colors[3]
            });

            DrawWatchablePolygons(tmpBmp, normals.Back,
                                  new List <PointF> {
                point2D[0], point2D[3], point2D[2], point2D[1], point2D[0]
            },
                                  new List <Color>()
            {
                colors[0], colors[3], colors[2], colors[1], colors[0]
            });

            DrawWatchablePolygons(tmpBmp, normals.Left,
                                  new List <PointF> {
                point2D[4], point2D[0], point2D[1], point2D[5], point2D[4]
            },
                                  new List <Color>()
            {
                colors[4], colors[0], colors[1], colors[5], colors[4]
            });

            DrawWatchablePolygons(tmpBmp, normals.Top,
                                  new List <PointF> {
                point2D[2], point2D[6], point2D[5], point2D[1], point2D[2]
            },
                                  new List <Color>()
            {
                colors[2], colors[6], colors[5], colors[1], colors[2]
            });

            DrawWatchablePolygons(tmpBmp, normals.Bottom,
                                  new List <PointF> {
                point2D[0], point2D[4], point2D[7], point2D[3], point2D[0]
            },
                                  new List <Color>()
            {
                colors[0], colors[4], colors[7], colors[3], colors[0]
            });

            return(tmpBmp);
        }
        /*public Bitmap DrawPhong(Bitmap tmpBmp, PointF[] point2D, Color[] colors, Point3D[] cubePoints)
         * {
         *  var normals = LightingLibrary.CalculateNormals(cubePoints);
         *
         *  const float4 diffColor = vec4(0.5, 0.0, 0.0, 1.0); //рассеянное освещение
         *  const vec4 specColor = vec4(0.7, 0.7, 0.0, 1.0);
         *  const float specPower = 30.0;
         *
         *  return tmpBmp;
         * }*/

        public static Color[] GetGuroColors(Point3D[] cubePoints, Point3D camera, Point3D light, Color baseColor)
        {
            Color[] colors   = new Color[8];
            var     intences = LightingLibrary.GetIntense(cubePoints, camera, light);

            for (int i = 0; i < colors.Length; i++)
            {
                colors[i] = Color.FromArgb(Clip((int)(baseColor.R * intences[i])), Clip((int)(baseColor.G * intences[i])), Clip((int)(baseColor.B * intences[i])));
            }
            return(colors);
        }