PVR сжатие в анимации - iphone SDK - PullRequest
2 голосов
/ 23 июня 2009

я анимирую последовательность кадров 89 кадров, которая была сокращена до половины путем помещения двух кадров на 512 x 512 кадров. но у меня серьезные проблемы с качеством изображения (с потерями)

Кто-нибудь знает хороший способ анимировать 89-кадровую анимацию, не теряя качества и не загружая процессор?

всего наилучшего.

Ответы [ 2 ]

4 голосов
/ 06 июля 2009

PVRTC определенно заставит ваше изображение выглядеть с потерями, но есть способы обойти это. Использование текстурного атласа может помочь, потому что PVRTC обычно портит края изображения больше всего, а также вызывает проблемы с прозрачностью. Я бы также попытался отключить любой фильтр mipmap, который у вас есть (как ближайший, так и линейный фильтры, но особенно ближайший, в сочетании с PVRTC, он может выглядеть значительно более размытым) и попробуйте включить линейный фильтр текстуры, который будет смешивать все так, чтобы потеря была менее заметной, а вещи выглядели слегка размытыми. Вы также можете сохранить ваши изображения больше, чем вы их рисуете (т. Е. Иметь изображение 512x512, сжатое с помощью PVRTC, но нарисуйте его с разрешением 256x256). 2BPP PVRTC приведет к тому, что текстура будет занимать на 1/8 больше памяти, чем RGBA 4444, поэтому даже увеличение такого размера (чтобы увеличить объем памяти в 4 раза) даст вам экономию в 2 раза. Однако если вы просто используете 4BPP, вы можете просто использовать RGBA 4444, если вам нужно изменить размер изображения в два раза.

Для больших изображений, которые должны быть более подробными, PVRTC, как правило, не очень хорошая стратегия. Что касается значков и тому подобного, вы можете увидеть значительную экономию, особенно потому, что можете рисовать их намного меньше.

Mipmaps сделаны так ( не сделайте это):
glGenerateMipmapOES(<code>GL_TEXTURE_2D);

И вы можете включить линейный текстурный фильтр следующим образом:
glTexParameteri(<code>GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

Вы определенно не хотите сделать это, либо:
glTexParameteri(<code>GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR_MIPMAP_LINEAR);

0 голосов
/ 01 июля 2009

Я делаю похожий проект, используя cocos2d. Ваши изображения могут выглядеть лучше, если вы сделаете одно изображение для текстуры или, возможно, попробуете формат RGBA 4444.

Но если вы используете cocos2d, это довольно просто. После того, как вы загрузили cocos2d, есть очень хороший пример кода.

http://www.cocos2d -iphone.org / архивы / 61

...