2015-08-26 2 views
0

Я новичок в OpenGL ES 2.0 и Android, и я пытаюсь сделать живые обои. В настоящее время я пытаюсь использовать атлас текстуры для создания анимаций и изменения текстур. Я везде искал, и this tutorial - самая полезная вещь, которую я нашел.Android OpenGL ES 2.0 Текстура Анимация

Я понимаю, как загрузить текстурный атлас, но как бы вы изменили объект текстуры, визуализируемый в методе onDrawFrame, так что это будет один квадрат, отображающий следующую текстуру в каждом кадре? Как выглядел бы настоящий код?

ответ

0

Используя то, что у вас есть в этом учебнике, вы можете вместо заполнения буфера uvBuffer (texCoord) со случайными значениями прокручивать через них каждый кадр. Итак, скажем, вы начинаете с УФ (0,0), УФ (0,25, 0), УФ (0, 0,25) и УФ (0,25, 0,25). Следующий кадр, вы меняете значения в uvBuffer на УФ (0,25, 0), УФ (0,5, 0), УФ (0,25, 0,25), УФ (0,5, 0,25). И так далее.

Решение 1: Имейте массив поиска со всеми возможными УФ-координатами. Затем используйте поле int, чтобы увеличить шаг каждого кадра. Поместите следующие 4 элемента во второй массив и замените содержимое буфера.

Решение 2: Храните 4 УФ-координаты в массиве и одно поле с плавающей точкой для x-координирования, одно для y-координирования. Увеличьте x-координату на 0,25 каждый кадр, y-координируйте на 0,25 каждые 4 кадра (или когда x-координируется 0) замените содержимое буфера на uv-coords, построенные из: x, x + 0,25, y, y + 0,25

Вы можете либо перестроить буфер enture, очистив его, поместив массив и перемотав его. Или вы можете использовать putFloat (int pos, float value) для замены существующих записей в буфере. Последнее, вероятно, более консервативно.

+0

Я как-то понял, что, как бы выглядел код для этого? –

+0

Вы можете предварительно заполнить массив со всеми возможными UV-координатами. Затем вы сохраняете int как индекс и шаг вперед в каждом кадре. Или вы можете сохранить каждый uv-коорд в качестве поплавка и увеличить их каждый кадр. Много возможностей. Реализация зависит от того, что лучше всего подходит для остальной части вашей архитектуры. – reden

+0

ОК, поэтому в первом примере, как бы вы обновили это в методе рисования? это просто изменит массив координат, а затем вызовет uvBuffer.put (coordArray)? –

Смежные вопросы