Изменить формат Texture2D в единстве

avatar
user8469759
25 апреля 2018 в 10:34
7073
1
3

У меня загружен Textured2D, который представлен в ETC_RGB4, как я могу изменить его на другой формат? скажем RGBA32. В основном я хочу переключиться с 3 каналов на 4 и с 4 бит на канал до 8 на канал.

Спасибо

Источник
Swift
25 апреля 2018 в 10:50
0

Согласно документации GetRawTextureData возвращает массив байтов, а не ETC_RBG4, как упоминалось выше. Есть что-то, чего я здесь не понимаю?

user8469759
25 апреля 2018 в 11:14
0

Непонятно и запутанно, позвольте мне изменить свой вопрос.

Ответы (1)

avatar
Programmer
25 апреля 2018 в 10:52
8

Вы можете изменить формат текстуры во время выполнения.

1 . Создайте новый пустой Texture2D и укажите RGBA32 аргументу TextureFormat. Это создаст пустую текстуру в формате RGBA32.

2 . Используйте Texture2D.GetPixels, чтобы получить пиксели старой текстуры в формате ETC_RGB4, затем используйте Texture2D.SetPixels, чтобы поместить эти пиксели во вновь созданную текстуру из # 1 .

3 . Позвоните по телефону Texture2D.Apply, чтобы применить изменения. Вот и все.

Простой метод расширения для этого:

public static class TextureHelperClass
{
    public static Texture2D ChangeFormat(this Texture2D oldTexture, TextureFormat newFormat)
    {
        //Create new empty Texture
        Texture2D newTex = new Texture2D(2, 2, newFormat, false);
        //Copy old texture pixels into new one
        newTex.SetPixels(oldTexture.GetPixels());
        //Apply
        newTex.Apply();

        return newTex;
    }
}

ИСПОЛЬЗОВАНИЕ :

public Texture2D theOldTextue;

// Update is called once per frame
void Start()
{
    Texture2D RGBA32Texture = theOldTextue.ChangeFormat(TextureFormat.RGBA32);
}