CubemapSaver

Лучший способ помочь другим, поделиться своими находками.

CubemapSaver

Сообщение pod4444 02 авг 2012, 13:27

Умеет сохранять cubemap в файл *.cubemap и загружать обратно. Сделано на основе неодроповского сейвера.

Синтаксис:
Используется csharp
    static class CubemapSaver
    {
        [System.Serializable]
        private class CubemapFile
        {
            [System.Serializable]
            private class ColorSL
            {
                float[] R, G, B, A;
                public ColorSL(Color[] colors)
                {
                    if(colors == null) return;
                    R = new float[colors.Length];
                    G = new float[colors.Length];
                    B = new float[colors.Length];
                    A = new float[colors.Length];
                    for (int i = 0; i < colors.Length; i++)
                    {
                        R[i] = colors[i].r;
                        G[i] = colors[i].g;
                        B[i] = colors[i].b;
                        A[i] = colors[i].a;
                    }
                }

                public Color[] GetColors()
                {
                    Color[] temp = new Color[R.Length];
                    for (int i = 0; i < temp.Length; i++)
                    {
                        temp[i] = new Color(R[i], G[i], B[i], A[i]);
                    }
                    return temp;
                }
            }

            private ColorSL NegativeX;
            private ColorSL NegativeY;
            private ColorSL NegativeZ;
            private ColorSL PositiveX;
            private ColorSL PositiveY;
            private ColorSL PositiveZ;

            public CubemapFile(Cubemap temp)
            {
                GetPixelsAtCubemap(temp);
            }

            public void SetPixelsAtCubemap(Cubemap temp)
            {
                temp.SetPixels(NegativeX.GetColors(), CubemapFace.NegativeX);
                temp.SetPixels(NegativeY.GetColors(), CubemapFace.NegativeY);
                temp.SetPixels(NegativeZ.GetColors(), CubemapFace.NegativeZ);
                temp.SetPixels(PositiveX.GetColors(), CubemapFace.PositiveX);
                temp.SetPixels(PositiveY.GetColors(), CubemapFace.PositiveY);
                temp.SetPixels(PositiveZ.GetColors(), CubemapFace.PositiveZ);
                temp.Apply(true);
            }

            public void GetPixelsAtCubemap(Cubemap temp)
            {
                NegativeX = new ColorSL(temp.GetPixels(CubemapFace.NegativeX));
                NegativeY = new ColorSL(temp.GetPixels(CubemapFace.NegativeX));
                NegativeZ = new ColorSL(temp.GetPixels(CubemapFace.NegativeX));
                PositiveX = new ColorSL(temp.GetPixels(CubemapFace.PositiveX));
                PositiveY = new ColorSL(temp.GetPixels(CubemapFace.PositiveY));
                PositiveZ = new ColorSL(temp.GetPixels(CubemapFace.PositiveZ));
            }
        }
        public static void Save(Cubemap obj, string fileName)
        {
            FileStream fs = new FileStream(fileName + ".cubemap", FileMode.Create);

            BinaryFormatter formatter = new BinaryFormatter();
            try
            {
                CubemapFile temp = new CubemapFile(obj);
                formatter.Serialize(fs, temp);
            }
            catch (SerializationException e)
            {
                Debug.Log("Failed to serialize. Reason: " + e.Message);
                throw;
            }
            finally
            {
                fs.Close();
            }
        }

        public static Cubemap Load(Cubemap obj,string fileName)
        {
            if (!File.Exists(fileName + ".cubemap")) return null;

            FileStream fs = new FileStream(fileName + ".cubemap", FileMode.Open);
            CubemapFile temp = null;
            try
            {
                BinaryFormatter formatter = new BinaryFormatter();

                temp = (CubemapFile)formatter.Deserialize(fs);
                temp.SetPixelsAtCubemap(obj);
            }
            catch (SerializationException e)
            {
                Debug.Log("Failed to deserialize. Reason: " + e.Message);
                throw;
            }
            finally
            {
                fs.Close();
            }
            return obj;
        }
    }
 
Аватара пользователя
pod4444
Старожил
 
Сообщения: 721
Зарегистрирован: 20 янв 2012, 22:02
Откуда: Воронеж
Skype: pod4444
  • Сайт

Re: CubemapSaver

Сообщение DanielDem 03 авг 2012, 10:54

Не понял...
.cubemap - это расширение формата unity для хранения кубической текстуры?
там что простая сериализация через BinaryFormatter ????
Да прибудет с Вами сила...
Аватара пользователя
DanielDem
UNITрон
 
Сообщения: 174
Зарегистрирован: 07 янв 2010, 13:27
Откуда: Россия
  • ICQ

Re: CubemapSaver

Сообщение pod4444 03 авг 2012, 12:32

Да, простая сериализация. Название формата совершенно неважно, просто так визуально удобнее
Аватара пользователя
pod4444
Старожил
 
Сообщения: 721
Зарегистрирован: 20 янв 2012, 22:02
Откуда: Воронеж
Skype: pod4444
  • Сайт


Вернуться в Исходники (Копилка)

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2