Android OpenGL ES текстурная анимация - PullRequest
2 голосов
/ 24 января 2012

Я разрабатываю игру для Android, и это мой первый опыт работы с OpenGL. Когда приложение загружается, я создаю свои вершины и буферы текстуры, я загружаю изображения из прорисовываемых ресурсов; используя GLUtils.tex2Image2D для привязки изображения к массиву текстур.

Мне было интересно, была ли функция glBindTexture () правильной для использования при изменении текстуры для создания анимации.

public void onDraw(GL10 gl){
    sprite.animate();
    gl.glBindTexture(GL10.GL_TEXTURE_2D, textures[sprite.frameNumber]);
    sprite.draw(gl);
}

Код Объяснение

sprite.animate () - изменяет номер кадра в зависимости от System.uptimeMillis ()

sprite.draw () - выполняет фактический рисунок:

gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);

gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer);
gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, textureBuffer);

gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, vertices.length / 3);

//Disable the client state before leaving
gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
gl.glDisableClientState(GL10.GL_TEXTURE_COORD_ARRAY);

Функция работает, но я хотел подтвердить, что это была правильная функция или есть альтернативный способ сделать это.

1 Ответ

4 голосов
/ 24 января 2012

Привязка другой текстуры к анимации - это один из способов сделать то, что вы хотите.

Более популярный способ сделать это состоит в том, чтобы все ваши кадры анимации были в большой текстуре (упакуйте все отдельные кадры в огромный прямоугольник): чтобы нарисовать другой кадр, просто измените координаты текстуры.

Например, упаковать четыре кадра анимации в большой квадрат 2х2

1|2
3|4

Затем вы будете использовать для координат текстуры (0,0) (0,5,0) (0,5,0,5) (0,0,5) для отображения кадра 1, а остальное должно быть очевидным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...