У меня есть 32-кадровая анимация в оттенках серого, в которой алмаз взрывается на части (т.е. 32 изображения PNG @ 1024x1024)
моя игра состоит из 12 отдельных цветов, поэтому мне нужно выполнить анимацию в любом желаемом цвете
я считаю, что это исключает любые фреймворки Apple, а также исключает использование большого количества общедоступного кода для покадровой анимации в iOS.
каковы мои потенциальные пути решения?
это лучшие ссылки SO, которые я нашел:
- Ускоренная анимация PNG для iPhone
- покадровая анимация
- Возможно ли использование видео в качестве текстуры для GL в iOS?
последний просто показывает, что возможно загружать изображение в текстуру GL в каждом кадре (он делает это с камеры, поэтому, если у меня все хранится в памяти, это должно быть еще быстрее)
Я вижу эти варианты (самые ленивые указаны первыми, самые оптимизированные последними)
вариант A для каждого кадра (любезно предоставлено CADisplayLink), загрузить соответствующее изображение из файла в текстуру и отобразить эту текстуру
Я почти уверен, что это глупо, так что на вариант Б
вариант B предварительно загрузить все изображения в память, как указано выше, только мы загружаем из памяти, а не из файла
Я думаю, что это будет идеальное решение, может ли кто-нибудь дать ему большие пальцы вверх или большие пальцы вниз?
вариант C предварительно загрузите все мои PNG в одну текстуру GL максимального размера, создав атлас текстуры. каждого кадра, установите координаты текстуры в прямоугольник в Атласе для этого кадра.
хотя это потенциально идеальный баланс между эффективностью кодирования и производительностью, основная проблема здесь — потеря разрешения; на старых устройствах iOS максимальный размер текстуры — 1024x1024. если мы втиснем в это 32 кадра (на самом деле это то же самое, что втиснуть 64), мы будем иметь разрешение 128x128 для каждого кадра. если полученная анимация близка к полному экрану на iPad, это не взломает ее.
вариант D вместо того, чтобы загружать в одну GL текстуру, загружать в кучу текстур, более того, мы можем втиснуть 4 изображения в одну текстуру, используя все четыре канала
Я отказываюсь от огромного количества сложного кода, необходимого здесь. Мой RSI начинает покалывать, даже думая об этом подходе
Я думаю, что ответил на свой вопрос здесь, но если кто-то действительно сделал это или может увидеть путь, пожалуйста, ответьте!