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); }