Следующий код не использует два четверных, но один квад, и адаптирует координаты текстуры соответственно , Обратите внимание, что я удалил весь код обработки текстур. Проекционная матрица содержит только glOrthof(0.0f, 1.0f, 0.0f, 1.0f, -1.0f, 1.0f);
. Quad2D
определяет четырехугольник, чьи текс Coords могут быть анимированы с использованием updateTexCoords
:
static class Quad2D {
public Quad2D() {
/* SNIP create buffers */
float[] coords = { 1.0f, 0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 0.0f, 1.0f, };
mFVertexBuffer.put(coords);
float[] texs = { 1.0f, 1.0f, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f, 0.0f, };
mTexBuffer.put(texs);
/* SNIP reposition buffer indices */
}
public void updateTexCoords(float t) {
t = t % 1.0f;
mTexBuffer.put(0, 0.33f+t);
mTexBuffer.put(2, 0.0f+t);
mTexBuffer.put(4, 0.33f+t);
mTexBuffer.put(6, 0.0f+t);
}
public void draw(GL10 gl) {
glVertexPointer(2, GL_FLOAT, 0, mFVertexBuffer);
glTexCoordPointer(2, GL_FLOAT, 0, mTexBuffer);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
}
/* SNIP members */
}
Теперь, как назвать updateTexCoords
? Внутри , поместите следующий код:
long time = SystemClock.uptimeMillis() % 3000L;
float velocity = 1.0f/3000.0f;
float offset = time * velocity;
mQuad.updateTexCoords(offset);
Поскольку координаты текстур выходят за рамками 1.0f
, текстура обертка для S координаты должна быть установлена в GL_REPEAT
.
_scrambling через мой мозг_ Вы не должны [принимать ответы] (http://stackoverflow.com/a/10179587/1262542), которые вам не помогут. Все нормально. –
@StefanHanke Извините, но я принял, потому что я должен был понять, что вы сказали. Затем я попытался закодировать этот алгоритм, но я не могу добиться успеха. Вот почему я снова спросил. – droidmachine