Ejemplo n.º 1
0
        /// <summary>
        /// Добавление эффекта тумана на изображение
        /// </summary>
        /// <param name="map">Существующее изображение и карта высоты</param>
        /// <param name="farthestZ">Последняя видимая глубина Z</param>
        /// <param name="viewZ">Z координата наблюдателя</param>
        /// <returns></returns>
        public static Bitmap AddFog(Zbuffer map, int farthestZ, int viewZ)
        {
            Bitmap img = map.GetImage().Clone(new Rectangle(0, 0, map.GetImage().Width, map.GetImage().Height), System.Drawing.Imaging.PixelFormat.Format32bppRgb);

            float rangeZ = viewZ - farthestZ;

            for (int i = 0; i < img.Width; i++)
            {
                for (int j = 0; j < img.Height; j++)
                {
                    int z = map.GetZ(i, j);
                    if (z <= farthestZ) // Дальше от нас; невидимо за туманом
                    {
                        img.SetPixel(i, j, fogColor);
                    }
                    else // Ближе к нам
                    {
                        float k = (z - farthestZ) / rangeZ;
                        img.SetPixel(i, j, Colors.Mix(img.GetPixel(i, j), fogColor, k));
                    }
                }
            }
            return(img);
        }
Ejemplo n.º 2
0
 private void HandleSceneChange()
 {
     sceneTurned  = scene.GetTurnedScene(tetax, tetay, tetaz);
     zbuf         = new Zbuffer(sceneTurned, canvas.Size, currentSun);
     canvas.Image = zbuf.AddShadows();
 }